* Removed endpoint and descriptor wrappers, everything is in the related structure like it's done in the uhci driver.

* Clean up continues


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22733 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Salvatore Benedetto 2007-10-26 12:55:16 +00:00
parent 662e5c8ce4
commit 9d211eb104
2 changed files with 31 additions and 56 deletions

View File

@ -18,9 +18,6 @@ struct pci_info;
struct pci_module_info;
class OHCIRootHub;
struct Endpoint;
struct TransferDescriptor;
// --------------------------------------
// OHCI:: Software isonchronous
// transfer descriptor
@ -38,45 +35,10 @@ typedef struct hcd_soft_itransfer
#endif
}hcd_soft_itransfer;
#define OHCI_SITD_SIZE ((sizeof (struct hcd_soft_itransfer) + OHCI_ITD_ALIGN - 1) / OHCI_ITD_ALIGN * OHCI_ITD_ALIGN)
#define OHCI_SITD_CHUNK 64
#define OHCI_SITD_SIZE ((sizeof (struct hcd_soft_itransfer) + OHCI_ITD_ALIGN - 1) / OHCI_ITD_ALIGN * OHCI_ITD_ALIGN)
#define OHCI_SITD_CHUNK 64
// ------------------------------------------
// OHCI:: Number of enpoint descriptors (63)
// ------------------------------------------
#define OHCI_NO_EDS (2 * OHCI_NUMBER_OF_INTERRUPTS - 1)
//
// Endpoint: wrapper around the hardware endpoints
//
struct Endpoint
{
addr_t physical_address;//Point to the physical address
ohci_endpoint_descriptor *ed; //Logical 'endpoint'
Endpoint *next; //Pointer to the 'next' endpoint
TransferDescriptor *head, *tail; //Pointers to the 'head' and 'tail' transfer descriptors
//Utility functions
void SetNext(Endpoint *end) {
next = end;
if (end == 0)
ed->next_endpoint = 0;
else
ed->next_endpoint = end->physical_address;
};
//Constructor (or better: initialiser)
Endpoint() : physical_address(0), ed(0), next(0), head(0), tail(0) {};
};
struct TransferDescriptor
{
addr_t physical_address;
ohci_general_transfer_descriptor *td;
};
#define OHCI_NUMBER_OF_ENDPOINTS (2 * OHCI_NUMBER_OF_INTERRUPTS - 1)
class OHCI : public BusManager
@ -104,8 +66,8 @@ static status_t AddTo(Stack *stack);
private:
// Register functions
inline void WriteReg(uint32 reg, uint32 value);
inline uint32 ReadReg(uint32 reg);
inline void _WriteReg(uint32 reg, uint32 value);
inline uint32 _ReadReg(uint32 reg);
// Global
static pci_module_info *sPCIModule;
@ -116,22 +78,23 @@ static pci_module_info *sPCIModule;
area_id fRegisterArea;
// HCCA
// Host Controller Communication Area related stuff
area_id fHccaArea;
struct ohci_hcca *fHcca;
Endpoint *fInterruptEndpoints[OHCI_NO_EDS];
struct ohci_hcca *fHcca;
Endpoint *fInterruptEndpoints[OHCI_NUMBER_OF_ENDPOINTS];
// Dummy endpoints
Endpoint *fDummyControl;
Endpoint *fDummyBulk;
Endpoint *fDummyIsochronous;
// functions
// Endpoint related methods
Endpoint *_AllocateEndpoint();
void _FreeEndpoint(Endpoint *end);
TransferDescriptor *_AllocateTransfer();
void _FreeTransfer(TransferDescriptor *trans);
status_t _InsertEndpointForPipe(Pipe *p);
void _SetNext(ohci_endpoint_descriptor *endpoint);
// Root Hub
OHCIRootHub *fRootHub;

View File

@ -297,10 +297,16 @@ typedef struct ohci_hcca
typedef struct ohci_endpoint_descriptor
{
uint32 flags;
uint32 tail_pointer; // Queue tail pointer
uint32 head_pointer; // Queue head pointer
uint32 next_endpoint; // Next endpoint in the list
// Hardware part
uint32 flags; // Flags field
uint32 tail_physical_descriptor; // Queue tail physical pointer
uint32 head_physical_descriptor; // Queue head physical pointer
uint32 next_physical_endpoint; // Physical pointer to the next endpoint
// Software part
addr_t this_physical; // Physical pointer to this address
void *tail_logical_descriptor; // Queue tail logical pointer
void *head_logical_descriptor; // Queue head logical pointer
void *next_logical_endpoint; // Logical pointer to the next endpoint
};
#define OHCI_ENDPOINT_ADDRESS_MASK 0x0000007f
@ -330,10 +336,16 @@ typedef struct ohci_endpoint_descriptor
typedef struct ohci_general_transfer_descriptor
{
uint32 flags;
uint32 buffer_phy; // Physical buffer pointer
uint32 next_descriptor; // Next transfer descriptor
uint32 last_byte_address; // Physical buffer end
// Hardware part
uint32 flags; // Flags field
uint32 buffer_physical; // Physical buffer pointer
uint32 next_physical_descriptor; // Physical pointer next descriptor
uint32 last_physical_byte_address; // Physical pointer to buffer end
// Software part
addr_t this_physical; // Physical pointer to this address
void *buffer_logical; // Logical pointer to the buffer
void *next_logical_descriptor; // Logical pointer next descriptor
void *last_logical_byte_address; // Logical pointer buffer end
};
#define OHCI_BUFFER_ROUNDING 0x00040000