X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=payloads%2Flibpayload%2Fdrivers%2Fusb%2Fehci_private.h;h=22fd7b222c6b98f3db2d0dc04258adf29174587d;hb=8fa2787a0d74c70ca9497abf1483ab9dd223e642;hp=f4890cc3c0c6c6e353121f74a7660d71a8333298;hpb=8bbdb61113ad7f6814b198c01236411e4a3b7482;p=coreboot.git diff --git a/payloads/libpayload/drivers/usb/ehci_private.h b/payloads/libpayload/drivers/usb/ehci_private.h index f4890cc3c..22fd7b222 100644 --- a/payloads/libpayload/drivers/usb/ehci_private.h +++ b/payloads/libpayload/drivers/usb/ehci_private.h @@ -37,134 +37,35 @@ #define FLADJ 0x61 #define FLADJ_framelength(x) (((x)-59488)/16) -typedef volatile union { - u32 val; - volatile struct { - unsigned long current_conn_status:1; - unsigned long conn_status_change:1; - unsigned long port_enable:1; - unsigned long port_enable_change:1; - unsigned long overcurrent:1; - unsigned long overcurrent_change:1; - unsigned long force_port_resume:1; - unsigned long suspend:1; - unsigned long port_reset:1; - unsigned long:1; - unsigned long line_status:2; - unsigned long pp:1; - unsigned long port_owner:1; - unsigned long port_indicator_control:2; - unsigned long port_test_control:4; - unsigned long wake_on_connect_en:1; - unsigned long wake_on_disconnect_en:1; - unsigned long wake_on_overcurrent_en:1; - unsigned long:9; - } __attribute__ ((packed)); -} __attribute__ ((packed)) portsc_t; +typedef volatile u32 portsc_t; +#define P_CURR_CONN_STATUS (1 << 0) +#define P_CONN_STATUS_CHANGE (1 << 1) +#define P_PORT_ENABLE (1 << 2) +#define P_PORT_RESET (1 << 8) +#define P_LINE_STATUS (3 << 10) +#define P_LINE_STATUS_LOWSPEED (1 << 10) +#define P_PP (1 << 12) +#define P_PORT_OWNER (1 << 13) typedef volatile struct { +#define HCS_NPORTS_MASK 0xf u8 caplength; u8 res1; u16 hciversion; - union { - u32 hcsparams; - struct { - unsigned long n_ports:4; - unsigned long ppc:1; - unsigned long:2; - unsigned long port_routing_rules:1; - unsigned long n_pcc:4; - unsigned long n_cc:4; - unsigned long p_indicator:1; - unsigned long:3; - unsigned long debug_port_number:4; - unsigned long:8; - } __attribute__ ((packed)); - }; - union { - u32 hccparams; - struct { - unsigned long cap_64b_addr:1; - unsigned long cap_prog_framelist_size:1; - unsigned long cap_async_park:1; - unsigned long:1; - unsigned long isoc_sched_threshold:4; - unsigned long eecp:8; - unsigned long:16; - } __attribute__ ((packed)); - }; - union { - u64 hcsp_portroute; - struct { - unsigned long portroute0:4; - unsigned long portroute1:4; - unsigned long portroute2:4; - unsigned long portroute3:4; - unsigned long portroute4:4; - unsigned long portroute5:4; - unsigned long portroute6:4; - unsigned long portroute7:4; - unsigned long portroute8:4; - unsigned long portroute9:4; - unsigned long portroute10:4; - unsigned long portroute11:4; - unsigned long portroute12:4; - unsigned long portroute13:4; - unsigned long portroute14:4; - unsigned long portroute15:4; - unsigned long:4; - } __attribute__ ((packed)); - }; + u32 hcsparams; + u32 hccparams; + u64 hcsp_portroute; } __attribute__ ((packed)) hc_cap_t; typedef volatile struct { - union { - u32 usbcmd; - volatile struct { - unsigned long rs:1; - unsigned long hcreset:1; - unsigned long frame_list_size:2; - unsigned long periodic_sched_enable:1; - unsigned long async_sched_enable:1; - unsigned long irq_on_async_advance_doorbell:1; - unsigned long light_hc_reset:1; - unsigned long async_sched_park_mode_count:2; - unsigned long:1; - unsigned long async_sched_park_mode_enable:1; - unsigned long:4; - unsigned long irq_threshold_count:8; - unsigned long:8; - } __attribute__ ((packed)); - }; - union { - u32 usbsts; - struct { - unsigned long usbint:1; - unsigned long usberrint:1; - unsigned long port_change_detect:1; - unsigned long frame_list_rollover:1; - unsigned long host_system_error:1; - unsigned long irq_on_async_advance:1; - unsigned long:6; - unsigned long hchalted:1; - unsigned long reclamation:1; - unsigned long periodic_sched_status:1; - unsigned long async_sched_status:1; - unsigned long:16; - } __attribute__ ((packed)); - }; - union { - u32 usbintr; - struct { - unsigned long en_usb_irq:1; - unsigned long en_usb_err_irq:1; - unsigned long en_port_change_irq:1; - unsigned long en_frame_list_rollover_irq:1; - unsigned long en_host_system_error_irq:1; - unsigned long en_irq_on_async_advance:1; - unsigned long:26; - } __attribute__ ((packed)); - }; + u32 usbcmd; +#define HC_OP_RS 1 +#define HC_OP_ASYNC_SCHED_EN_SHIFT 5 +#define HC_OP_ASYNC_SCHED_EN (1 << HC_OP_ASYNC_SCHED_EN_SHIFT) + u32 usbsts; +#define HC_OP_ASYNC_SCHED_STAT_SHIFT 15 +#define HC_OP_ASYNC_SCHED_STAT (1 << HC_OP_ASYNC_SCHED_STAT_SHIFT) + u32 usbintr; u32 frindex; u32 ctrldssegment; u32 periodiclistbase; @@ -175,82 +76,46 @@ typedef volatile struct { } hc_op_t; typedef volatile struct { - union { - u32 next_qtd; - struct { - unsigned long terminate:1; - unsigned long:4; - unsigned long:27; - } __attribute__ ((packed)); - }; - union { - u32 alt_next_qtd; - struct { - unsigned long alt_terminate:1; - unsigned long:4; - unsigned long:27; - } __attribute__ ((packed)); - }; - struct { - union { - volatile u8 status; - struct { - volatile unsigned long perr:1; - volatile unsigned long splitxstate:1; - volatile unsigned long missed_mframe:1; - volatile unsigned long xact_err:1; - volatile unsigned long babble:1; - volatile unsigned long data_buf_err:1; - volatile unsigned long halted:1; - volatile unsigned long active:1; - } __attribute__ ((packed)); - }; - unsigned long pid:2; - volatile unsigned long cerr:2; - volatile unsigned long c_page:3; - unsigned long ioc:1; - volatile unsigned long total_len:15; - volatile unsigned long dt:1; - } __attribute__ ((packed)); - union { - u32 bufptr0; - struct { - volatile unsigned long cur_off:12; - unsigned long:20; - } __attribute__ ((packed)); - }; - u32 bufptrs[4]; +#define QTD_TERMINATE 1 + u32 next_qtd; + u32 alt_next_qtd; + u32 token; +#define QTD_STATUS_MASK 0xff +#define QTD_HALTED (1 << 14) +#define QTD_ACTIVE (1 << 15) +#define QTD_PID_SHIFT 8 +#define QTD_PID_MASK (3 << QTD_PID_SHIFT) +#define QTD_CERR_SHIFT 10 +#define QTD_CERR_MASK (3 << QTD_CERR_SHIFT) +#define QTD_CPAGE_SHIFT 12 +#define QTD_CPAGE_MASK (7 << QTD_CPAGE_SHIFT) +#define QTD_TOTAL_LEN_SHIFT 16 +#define QTD_TOTAL_LEN_MASK (((1<<15)-1) << QTD_TOTAL_LEN_SHIFT) +#define QTD_TOGGLE_SHIFT 31 +#define QTD_TOGGLE_MASK (1 << 31) +#define QTD_TOGGLE_DATA0 0 +#define QTD_TOGGLE_DATA1 (1 << QTD_TOGGLE_SHIFT) + u32 bufptrs[5]; u32 bufptrs64[5]; } __attribute__ ((packed)) qtd_t; typedef volatile struct { - union { - u32 horiz_link_ptr; - struct { - unsigned long terminate:1; - unsigned long type:2; - unsigned long:1; - unsigned long:28; - } __attribute__ ((packed)); - }; - struct { - unsigned long addr:7; - unsigned long inactivate:1; - unsigned long ep:4; - unsigned long eps:2; - unsigned long dtc:1; - unsigned long reclaim_head:1; - unsigned long max_packet_len:11; - unsigned long non_hs_control_ep:1; - unsigned long nak_cnt_reload:4; - } __attribute__ ((packed)); - struct { - unsigned long irq_sched_mask:8; - unsigned long split_compl_mask:8; - unsigned long hub_addr:7; - unsigned long port_num:7; - unsigned long pipe_multiplier:2; - } __attribute__ ((packed)); + u32 horiz_link_ptr; +#define QH_TERMINATE 1 +#define QH_iTD (0<<1) +#define QH_QH (1<<1) +#define QH_siTD (2<<1) +#define QH_FSTN (3<<1) + u32 epchar; +#define QH_EP_SHIFT 8 +#define QH_EPS_SHIFT 12 +#define QH_DTC_SHIFT 14 +#define QH_RECLAIM_HEAD_SHIFT 15 +#define QH_MPS_SHIFT 16 +#define QH_NON_HS_CTRL_EP_SHIFT 27 +#define QH_NAK_CNT_SHIFT 28 + u32 epcaps; +#define QH_PIPE_MULTIPLIER_SHIFT 30 volatile u32 current_td_ptr; volatile qtd_t td; } ehci_qh_t;