The Pedigree Project  0.1
Classes | Public Member Functions | Protected Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
UsbMassStorageDevice Class Reference
+ Inheritance diagram for UsbMassStorageDevice:
+ Collaboration diagram for UsbMassStorageDevice:

Classes

struct  Cbw
 
struct  Csw
 

Public Member Functions

 UsbMassStorageDevice (UsbDevice *dev)
 
virtual void initialiseDriver ()
 Implemented by the driver class, initialises driver-specific stuff. More...
 
virtual bool sendCommand (size_t nUnit, uintptr_t pCommand, uint8_t nCommandSize, uintptr_t pRespBuffer, uint16_t nRespBytes, bool bWrite)
 
virtual void getUsbDeviceName (String &str)
 
virtual bool hasSubtree () const
 Do we expose our own Device tree?
 
virtual DevicegetDevice ()
 
- Public Member Functions inherited from ScsiController
 ScsiController (Controller *pDev)
 
virtual uint64_t executeRequest (uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)
 
- Public Member Functions inherited from Controller
 Controller (Device *pDev)
 
virtual Type getType ()
 
virtual void getName (String &str)
 
virtual void dump (String &str)
 
- Public Member Functions inherited from Device
 Device (Device *p)
 
DevicegetParent () const
 
void setParent (Device *p)
 
virtual String getSpecificType ()
 
virtual void setSpecificType (String str)
 
void setPciPosition (uint32_t bus, uint32_t device, uint32_t func)
 
void setPciIdentifiers (uint8_t classCode, uint8_t subclassCode, uint16_t vendorId, uint16_t deviceId, uint8_t progIf)
 
void setPciConfigHeader (const PciBus::ConfigSpace &space)
 
PciBus::ConfigSpace getPciConfigHeader () const
 
uint8_t getPciClassCode ()
 
uint8_t getPciSubclassCode ()
 
uint16_t getPciVendorId ()
 
uint16_t getPciDeviceId ()
 
uint8_t getPciProgInterface ()
 
uint32_t getPciBusPosition ()
 
uint32_t getPciDevicePosition ()
 
uint32_t getPciFunctionNumber ()
 
virtual Vector< Address * > & addresses ()
 
virtual uintptr_t getInterruptNumber ()
 
virtual void setInterruptNumber (uintptr_t n)
 
void addChild (Device *pDevice)
 
DevicegetChild (size_t n)
 
size_t getNumChildren ()
 
void removeChild (size_t n)
 
void removeChild (Device *d)
 
void replaceChild (Device *src, Device *dest)
 
- Public Member Functions inherited from RequestQueue
 RequestQueue (const String &name)
 
virtual void initialise ()
 
virtual void destroy ()
 
MUST_USE_RESULT uint64_t addRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
MUST_USE_RESULT uint64_t addRequest (size_t priority, ActionOnDuplicate action, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
uint64_t addAsyncRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
void halt ()
 
void resume ()
 
- Public Member Functions inherited from UsbDevice
 UsbDevice (UsbHub *pHub, uint8_t nPort, UsbSpeed speed)
 Default constructor.
 
 UsbDevice (UsbDevice *pDev)
 Copy constructor.
 
virtual ~UsbDevice ()
 Destructor.
 
void initialise (uint8_t nAddress)
 Initialises the device at the given address. More...
 
uint8_t getAddress ()
 Returns the current address of the device.
 
uint8_t getPort ()
 Returns the number of the port on which the device is connected.
 
UsbSpeed getSpeed ()
 Returns the speed at which the device operates.
 
UsbState getUsbState ()
 Returns the current state of the device.
 
DeviceDescriptorgetDescriptor ()
 Returns the device descriptor of the device.
 
ConfigDescriptorgetConfiguration ()
 Returns the configuration in use.
 
InterfacegetInterface ()
 Returns the interface in use.
 
void useConfiguration (uint8_t nConfig)
 Switches to the given configuration.
 
void useInterface (uint8_t nInterface)
 Switches to the given interface.
 
UsbDeviceContainergetContainer () const
 Gets our Device container, for replacing parents on hubs etc.
 

Protected Member Functions

virtual size_t getNumUnits ()
 
- Protected Member Functions inherited from ScsiController
void searchDisks ()
 
- Protected Member Functions inherited from Device
 NOT_COPYABLE_OR_ASSIGNABLE (Device)
 
- Protected Member Functions inherited from RequestQueue
 RequestQueue (const RequestQueue &)
 
void operator= (const RequestQueue &)
 
virtual bool compareRequests (const Request &a, const Request &b)
 
bool isRequestValid (const Request *r)
 
int work ()
 
RequestgetNextRequest ()
 
- Protected Member Functions inherited from UsbDevice
ssize_t doSync (Endpoint *pEndpoint, UsbPid pid, uintptr_t pBuffer, size_t nBytes, size_t timeout)
 
ssize_t syncIn (Endpoint *pEndpoint, uintptr_t pBuffer, size_t nBytes, size_t timeout=5000)
 
ssize_t syncOut (Endpoint *pEndpoint, uintptr_t pBuffer, size_t nBytes, size_t timeout=5000)
 
void addInterruptInHandler (Endpoint *pEndpoint, uintptr_t pBuffer, uint16_t nBytes, void(*pCallback)(uintptr_t, ssize_t), uintptr_t pParam=0)
 
bool controlRequest (uint8_t nRequestType, uint8_t nRequest, uint16_t nValue, uint16_t nIndex, uint16_t nLength=0, uintptr_t pBuffer=0)
 Performs an USB control request.
 
uint16_t getStatus ()
 Gets device's current status.
 
bool clearEndpointHalt (Endpoint *pEndpoint)
 Clears a halt on the given endpoint.
 
void * getDescriptor (uint8_t nDescriptorType, uint8_t nDescriptorIndex, uint16_t nBytes, uint8_t requestType=0)
 Gets a descriptor from the device. More...
 
uint8_t getDescriptorLength (uint8_t nDescriptorType, uint8_t nDescriptorIndex, uint8_t requestType=0)
 Gets a descriptor's length from the device. More...
 
String getString (uint8_t nString)
 Gets a string. More...
 

Private Types

enum  MassStorageRequests { MassStorageRequest, MassStorageReset = 0xFF, MassStorageGetMaxLUN = 0xFE }
 
enum  MassStorageSigs { CbwSig = HOST_TO_LITTLE32(0x43425355), CswSig = HOST_TO_LITTLE32(0x53425355) }
 

Private Member Functions

bool massStorageReset ()
 

Private Attributes

struct UsbMassStorageDevice::Cbw PACKED
 
struct UsbMassStorageDevice::Csw PACKED
 
size_t m_nUnits
 
Endpointm_pInEndpoint
 
Endpointm_pOutEndpoint
 

Additional Inherited Members

- Public Types inherited from Device
enum  Type {
  Generic, Root, Disk, Bus,
  Display, Network, Sound, Console,
  Mouse, Controller, UsbController, UsbGeneric,
  UsbContainer
}
 
typedef Device *(* Callback) (Device *)
 
- Public Types inherited from RequestQueue
enum  ActionOnDuplicate { Block, NewRequest, ReturnImmediately }
 
- Public Types inherited from UsbDevice
enum  UsbState {
  Connected = 0, Addressed, HasDescriptors, Configured,
  HasInterface, HasDriver
}
 Possible states for an USB device.
 
- Static Public Member Functions inherited from Device
static void foreach (Callback callback, Device *root=0)
 
template<class F , class... Args>
static void foreach (pedigree_std::Callable< F > &callback, Device *root, Args...args)
 
static void addToRoot (Device *device)
 
static void searchByVendorId (uint16_t vendorId, void(*callback)(Device *), Device *root=0)
 
static void searchByVendorIdAndDeviceId (uint16_t vendorId, uint16_t deviceId, void(*callback)(Device *), Device *root=0)
 
static void searchByClass (uint16_t classCode, void(*callback)(Device *), Device *root=0)
 
static void searchByClassAndSubclass (uint16_t classCode, uint16_t subclassCode, void(*callback)(Device *), Device *root=0)
 
static void searchByClassSubclassAndProgInterface (uint16_t classCode, uint16_t subclassCode, uint8_t progInterface, void(*callback)(Device *), Device *root=0)
 
- Public Attributes inherited from UsbDevice
struct UsbDevice::Setup PACKED
 
struct UsbDevice::DeviceQualifier PACKED
 
- Static Protected Member Functions inherited from Device
static Deviceroot ()
 
- Static Protected Member Functions inherited from RequestQueue
static int trampoline (void *p)
 
static int doAsync (void *p)
 
- Protected Attributes inherited from Device
Vector< Address * > m_Addresses
 
Vector< Device * > m_Children
 
Devicem_pParent
 
uintptr_t m_InterruptNumber
 
String m_SpecificType
 
PciBus::ConfigSpace m_ConfigHeader
 
uint8_t m_ClassCode
 
uint8_t m_SubclassCode
 
uint16_t m_VendorId
 
uint16_t m_DeviceId
 
uint8_t m_ProgInterface
 
uint32_t m_PciBusPos
 
uint32_t m_PciDevicePos
 
uint32_t m_PciFunctionNum
 
- Protected Attributes inherited from RequestQueue
Requestm_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES]
 
volatile bool m_Stop
 
Mutex m_RequestQueueMutex
 
ConditionVariable m_RequestQueueCondition
 
ConditionVariable m_AsyncRequestQueueCondition
 
Threadm_pThread
 
bool m_Halted
 
Mutex m_HaltAcknowledged
 
RequestQueueOverrunChecker m_OverrunChecker
 
size_t m_nMaxAsyncRequests
 
size_t m_nAsyncRequests
 
size_t m_nTotalRequests
 
String m_Name
 
- Protected Attributes inherited from UsbDevice
uint8_t m_nAddress
 The current address of the device.
 
uint8_t m_nPort
 The number of the port on which the device is connected.
 
UsbSpeed m_Speed
 The speed at which the device operates.
 
UsbState m_UsbState
 The current state of the device.
 
DeviceDescriptorm_pDescriptor
 Device descriptor for this device.
 
ConfigDescriptorm_pConfiguration
 Configuration in use.
 
Interfacem_pInterface
 Interface in use.
 
UsbHubm_pHub
 Parent USB hub.
 
UsbDeviceContainerm_pContainer
 Our current container.
 
- Static Protected Attributes inherited from Device
static Device m_Root
 
static Mutex m_TreeLock
 

Detailed Description

Definition at line 33 of file UsbMassStorageDevice.h.

Member Function Documentation

virtual Device* UsbMassStorageDevice::getDevice ( )
inlinevirtual

Get a usable Device for this particular UsbDevice, if it has a subtree.

Returns
NULL if this operation is not supported.

Reimplemented from UsbDevice.

Definition at line 55 of file UsbMassStorageDevice.h.

void UsbMassStorageDevice::initialiseDriver ( )
virtual

Implemented by the driver class, initialises driver-specific stuff.

Todo:
Some mass storage devices don't support this command, fail to return logical information, or just report incorrect data. All that needs to be handled.

Reimplemented from UsbDevice.

Definition at line 37 of file UsbMassStorageDevice.cc.

References UsbDevice::controlRequest(), ERROR, UsbHumanInterfaceDevice::m_pInEndpoint, UsbDevice::m_pInterface, and UsbDevice::m_UsbState.

bool UsbMassStorageDevice::sendCommand ( size_t  nUnit,
uintptr_t  pCommand,
uint8_t  nCommandSize,
uintptr_t  pRespBuffer,
uint16_t  nRespBytes,
bool  bWrite 
)
virtual
Todo:
Should probably just be transaction errors and stalls
Todo:
Should probably just be transaction errors and stalls

Implements ScsiController.

Definition at line 94 of file UsbMassStorageDevice.cc.

References UsbDevice::clearEndpointHalt(), DEBUG_LOG, Dec, Hex, and UsbHumanInterfaceDevice::m_pInEndpoint.


The documentation for this class was generated from the following files: