Home | History | Annotate | Download | only in Pei
      1 /** @file
      2 This file contains the descriptor definination of OHCI spec
      3 
      4 Copyright (c) 2013-2015 Intel Corporation.
      5 
      6 This program and the accompanying materials
      7 are licensed and made available under the terms and conditions of the BSD License
      8 which accompanies this distribution.  The full text of the license may be found at
      9 http://opensource.org/licenses/bsd-license.php
     10 
     11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     13 
     14 **/
     15 
     16 
     17 
     18 #ifndef _DESCRIPTOR_H
     19 #define _DESCRIPTOR_H
     20 
     21 #define ED_FUNC_ADD     0x0001
     22 #define ED_ENDPT_NUM    0x0002
     23 #define ED_DIR          0x0004
     24 #define ED_SPEED        0x0008
     25 #define ED_SKIP         0x0010
     26 #define ED_FORMAT       0x0020
     27 #define ED_MAX_PACKET   0x0040
     28 #define ED_TDTAIL_PTR   0x0080
     29 #define ED_HALTED       0x0100
     30 #define ED_DTTOGGLE     0x0200
     31 #define ED_TDHEAD_PTR   0x0400
     32 #define ED_NEXT_EDPTR   0x0800
     33 #define ED_PDATA        0x1000
     34 #define ED_ZERO         0x2000
     35 
     36 #define TD_BUFFER_ROUND     0x0001
     37 #define TD_DIR_PID          0x0002
     38 #define TD_DELAY_INT        0x0004
     39 #define TD_DT_TOGGLE        0x0008
     40 #define TD_ERROR_CNT        0x0010
     41 #define TD_COND_CODE        0x0020
     42 #define TD_CURR_BUFFER_PTR  0x0040
     43 #define TD_NEXT_PTR         0x0080
     44 #define TD_BUFFER_END_PTR   0x0100
     45 #define TD_PDATA            0x0200
     46 
     47 #define ED_FROM_TD_DIR        0x0
     48 #define ED_OUT_DIR            0x1
     49 #define ED_IN_DIR             0x2
     50 #define ED_FROM_TD_ALSO_DIR   0x3
     51 
     52 #define TD_SETUP_PID          0x00
     53 #define TD_OUT_PID            0x01
     54 #define TD_IN_PID             0x02
     55 #define TD_NODATA_PID         0x03
     56 
     57 #define HI_SPEED              0
     58 #define LO_SPEED              1
     59 
     60 #define TD_NO_ERROR           0x00
     61 #define TD_CRC_ERROR          0x01
     62 #define TD_BITSTUFFING_ERROR  0x02
     63 #define TD_TOGGLE_ERROR       0x03
     64 #define TD_DEVICE_STALL       0x04
     65 #define TD_NO_RESPONSE        0x05
     66 #define TD_PIDCHK_FAIL        0x06
     67 #define TD_PID_UNEXPECTED     0x07
     68 #define TD_DATA_OVERRUN       0x08
     69 #define TD_DATA_UNDERRUN      0x09
     70 #define TD_BUFFER_OVERRUN     0x0C
     71 #define TD_BUFFER_UNDERRUN    0x0D
     72 #define TD_TOBE_PROCESSED     0x0E
     73 #define TD_TOBE_PROCESSED_2   0x0F
     74 
     75 #define TD_NO_DELAY           0x7
     76 
     77 #define TD_INT                0x1
     78 #define TD_CTL                0x2
     79 #define TD_BLK                0x3
     80 
     81 typedef struct {
     82   UINT32 Reserved:18;
     83   UINT32 BufferRounding:1;
     84   UINT32 DirPID:2;
     85   UINT32 DelayInterrupt:3;
     86   UINT32 DataToggle:2;
     87   UINT32 ErrorCount:2;
     88   UINT32 ConditionCode:4;
     89 } TD_DESCRIPTOR_WORD0;
     90 
     91 typedef struct _TD_DESCRIPTOR {
     92   TD_DESCRIPTOR_WORD0     Word0;
     93   VOID                    *CurrBufferPointer;
     94   struct _TD_DESCRIPTOR   *NextTD;
     95   VOID                    *BufferEndPointer;
     96   struct _TD_DESCRIPTOR   *NextTDPointer;
     97   UINT8                   *DataBuffer;
     98   UINT32                  ActualSendLength;
     99 } TD_DESCRIPTOR;
    100 
    101 typedef struct {
    102   UINT32 FunctionAddress:7;
    103   UINT32 EndPointNum:4;
    104   UINT32 Direction:2;
    105   UINT32 Speed:1;
    106   UINT32 Skip:1;
    107   UINT32 Format:1;
    108   UINT32 MaxPacketSize:11;
    109   UINT32 FreeSpace:5;
    110 } ED_DESCRIPTOR_WORD0;
    111 
    112 typedef struct {
    113   UINT32 Halted:1;
    114   UINT32 ToggleCarry:1;
    115   UINT32 Zero:2;
    116   UINT32 TdHeadPointer:28;
    117 } ED_DESCRIPTOR_WORD2;
    118 
    119 typedef struct _ED_DESCRIPTOR {
    120   ED_DESCRIPTOR_WORD0     Word0;
    121   TD_DESCRIPTOR           *TdTailPointer;
    122   ED_DESCRIPTOR_WORD2     Word2;
    123   struct _ED_DESCRIPTOR   *NextED;
    124 } ED_DESCRIPTOR;
    125 
    126 #define TD_PTR(p)            ((TD_DESCRIPTOR *)((p) << 4))
    127 #define ED_PTR(p)            ((ED_DESCRIPTOR *)((p) << 4))
    128 #define RIGHT_SHIFT_4(p)     ((UINT32)(p) >> 4)
    129 
    130 typedef enum {
    131   CONTROL_LIST,
    132   BULK_LIST,
    133   INTERRUPT_LIST,
    134   ISOCHRONOUS_LIST
    135 } DESCRIPTOR_LIST_TYPE;
    136 
    137 #endif
    138