#ifndef __USB_EHCI_H
#define __USB_EHCI_H

// usb-ehci.c
void ehci_setup(void);
void ehci_wait_controllers(void);
struct usbdevice_s;
struct usb_endpoint_descriptor;
struct usb_pipe;
struct usb_pipe *ehci_realloc_pipe(struct usbdevice_s *usbdev
                                   , struct usb_pipe *upipe
                                   , struct usb_endpoint_descriptor *epdesc);
int ehci_send_pipe(struct usb_pipe *p, int dir, const void *cmd
                   , void *data, int datasize);
int ehci_poll_intr(struct usb_pipe *p, void *data);


/****************************************************************
 * ehci structs and flags
 ****************************************************************/

struct ehci_caps {
    u8 caplength;
    u8 reserved_01;
    u16 hciversion;
    u32 hcsparams;
    u32 hccparams;
    u64 portroute;
} PACKED;

#define HCC_64BIT_ADDR 1

#define HCS_N_PORTS_MASK 0xf

struct ehci_regs {
    u32 usbcmd;
    u32 usbsts;
    u32 usbintr;
    u32 frindex;
    u32 ctrldssegment;
    u32 periodiclistbase;
    u32 asynclistbase;
    u32 reserved[9];
    u32 configflag;
    u32 portsc[0];
} PACKED;

#define CMD_PARK        (1<<11)
#define CMD_PARK_CNT(c) (((c)>>8)&3)
#define CMD_LRESET      (1<<7)
#define CMD_IAAD        (1<<6)
#define CMD_ASE         (1<<5)
#define CMD_PSE         (1<<4)
#define CMD_HCRESET     (1<<1)
#define CMD_RUN         (1<<0)

#define STS_ASS         (1<<15)
#define STS_PSS         (1<<14)
#define STS_RECL        (1<<13)
#define STS_HALT        (1<<12)
#define STS_IAA         (1<<5)
#define STS_FATAL       (1<<4)
#define STS_FLR         (1<<3)
#define STS_PCD         (1<<2)
#define STS_ERR         (1<<1)
#define STS_INT         (1<<0)

#define FLAG_CF         (1<<0)

#define PORT_WKOC_E     (1<<22)
#define PORT_WKDISC_E   (1<<21)
#define PORT_WKCONN_E   (1<<20)
#define PORT_TEST_PKT   (0x4<<16)
#define PORT_LED_OFF    (0<<14)
#define PORT_LED_AMBER  (1<<14)
#define PORT_LED_GREEN  (2<<14)
#define PORT_LED_MASK   (3<<14)
#define PORT_OWNER      (1<<13)
#define PORT_POWER      (1<<12)
#define PORT_LINESTATUS_MASK   (3<<10)
#define PORT_LINESTATUS_KSTATE (1<<10)
#define PORT_RESET      (1<<8)
#define PORT_SUSPEND    (1<<7)
#define PORT_RESUME     (1<<6)
#define PORT_OCC        (1<<5)
#define PORT_OC         (1<<4)
#define PORT_PEC        (1<<3)
#define PORT_PE         (1<<2)
#define PORT_CSC        (1<<1)
#define PORT_CONNECT    (1<<0)
#define PORT_RWC_BITS   (PORT_CSC | PORT_PEC | PORT_OCC)


#define EHCI_QH_ALIGN 128 // Can't span a 4K boundary, so increase from 32

struct ehci_qh {
    u32 next;
    u32 info1;
    u32 info2;
    u32 current;

    u32 qtd_next;
    u32 alt_next;
    u32 token;
    u32 buf[5];
    u32 buf_hi[5];
} PACKED;

#define QH_CONTROL       (1 << 27)
#define QH_MAXPACKET_SHIFT 16
#define QH_MAXPACKET_MASK  (0x7ff << QH_MAXPACKET_SHIFT)
#define QH_HEAD          (1 << 15)
#define QH_TOGGLECONTROL (1 << 14)
#define QH_SPEED_SHIFT   12
#define QH_SPEED_MASK    (0x3 << QH_SPEED_SHIFT)
#define QH_EP_SHIFT      8
#define QH_EP_MASK       (0xf << QH_EP_SHIFT)
#define QH_DEVADDR_SHIFT 0
#define QH_DEVADDR_MASK  (0x7f << QH_DEVADDR_SHIFT)

#define QH_SMASK_SHIFT   0
#define QH_SMASK_MASK    (0xff << QH_SMASK_SHIFT)
#define QH_CMASK_SHIFT   8
#define QH_CMASK_MASK    (0xff << QH_CMASK_SHIFT)
#define QH_HUBADDR_SHIFT 16
#define QH_HUBADDR_MASK  (0x7f << QH_HUBADDR_SHIFT)
#define QH_HUBPORT_SHIFT 23
#define QH_HUBPORT_MASK  (0x7f << QH_HUBPORT_SHIFT)
#define QH_MULT_SHIFT    30
#define QH_MULT_MASK     (0x3 << QH_MULT_SHIFT)

#define EHCI_PTR_BITS           0x001F
#define EHCI_PTR_TERM           0x0001
#define EHCI_PTR_QH             0x0002


#define EHCI_QTD_ALIGN 64 // Can't span a 4K boundary, so increase from 32

struct ehci_qtd {
    u32 qtd_next;
    u32 alt_next;
    u32 token;
    u32 buf[5];
    u32 buf_hi[5];
    /* keep struct size a multiple of 64 bytes, as we're allocating
       arrays. Without this padding, the second qtd could have the
       wrong alignment. */
} PACKED __aligned(EHCI_QTD_ALIGN);

#define QTD_TOGGLE      (1 << 31)
#define QTD_LENGTH_SHIFT 16
#define QTD_LENGTH_MASK (0x7fff << QTD_LENGTH_SHIFT)
#define QTD_CERR_SHIFT  10
#define QTD_CERR_MASK   (0x3 << QTD_CERR_SHIFT)
#define QTD_IOC         (1 << 15)
#define QTD_PID_OUT     (0x0 << 8)
#define QTD_PID_IN      (0x1 << 8)
#define QTD_PID_SETUP   (0x2 << 8)
#define QTD_STS_ACTIVE  (1 << 7)
#define QTD_STS_HALT    (1 << 6)
#define QTD_STS_DBE     (1 << 5)
#define QTD_STS_BABBLE  (1 << 4)
#define QTD_STS_XACT    (1 << 3)
#define QTD_STS_MMF     (1 << 2)
#define QTD_STS_STS     (1 << 1)
#define QTD_STS_PING    (1 << 0)

#define ehci_explen(len) (((len) << QTD_LENGTH_SHIFT) & QTD_LENGTH_MASK)

#define ehci_maxerr(err) (((err) << QTD_CERR_SHIFT) & QTD_CERR_MASK)


struct ehci_framelist {
    u32 links[1024];
} PACKED;

#endif // usb-ehci.h
