Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/uhci-hcd/main.c

    r7e7f0f5 re0df6c2  
    3434#include <driver.h>
    3535#include <usb_iface.h>
    36 #include <ipc/irc.h>
    37 #include <ipc/ns.h>
    38 #include <ipc/services.h>
    39 #include <sysinfo.h>
    4036
    4137#include <errno.h>
     
    5046#define NAME "uhci-hcd"
    5147
    52 static int uhci_add_device(device_t *device);
    53 static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle);
    54 /*----------------------------------------------------------------------------*/
    5548static int usb_iface_get_hc_handle(device_t *dev, devman_handle_t *handle)
    5649{
     
    6154        return EOK;
    6255}
    63 /*----------------------------------------------------------------------------*/
     56
    6457static usb_iface_t hc_usb_iface = {
    6558        .get_hc_handle = usb_iface_get_hc_handle
    6659};
    67 /*----------------------------------------------------------------------------*/
     60
    6861static device_ops_t uhci_ops = {
    6962        .interfaces[USB_DEV_IFACE] = &hc_usb_iface,
    7063        .interfaces[USBHC_DEV_IFACE] = &uhci_iface
    7164};
    72 /*----------------------------------------------------------------------------*/
    73 static driver_ops_t uhci_driver_ops = {
    74         .add_device = uhci_add_device,
    75 };
    76 /*----------------------------------------------------------------------------*/
    77 static driver_t uhci_driver = {
    78         .name = NAME,
    79         .driver_ops = &uhci_driver_ops
    80 };
    81 /*----------------------------------------------------------------------------*/
    82 static irq_cmd_t uhci_cmds[] = {
    83         {
    84                 .cmd = CMD_PIO_READ_16,
    85                 .addr = (void*)0xc022,
    86                 .dstarg = 1
    87         },
    88         {
    89                 .cmd = CMD_PIO_WRITE_16,
    90                 .addr = (void*)0xc022,
    91                 .value = 0x1f
    92         },
    93         {
    94                 .cmd = CMD_ACCEPT
    95         }
    96 };
    97 /*----------------------------------------------------------------------------*/
    98 static irq_code_t uhci_code = {
    99         sizeof(uhci_cmds) / sizeof(irq_cmd_t),
    100         uhci_cmds
    101 };
    102 /*----------------------------------------------------------------------------*/
    103 static void irq_handler(device_t *device, ipc_callid_t iid, ipc_call_t *call)
    104 {
    105         assert(device);
    106         uhci_t *hc = dev_to_uhci(device);
    107         usb_log_info("LOL HARDWARE INTERRUPT: %p.\n", hc);
    108         uint16_t status = IPC_GET_ARG1(*call);
    109         assert(hc);
    110         uhci_interrupt(hc, status);
    111 }
    112 /*----------------------------------------------------------------------------*/
     65
    11366static int uhci_add_device(device_t *device)
    11467{
     
    12275        int irq;
    12376
    124         int ret =
    125             pci_get_my_registers(device, &io_reg_base, &io_reg_size, &irq);
     77        int rc = pci_get_my_registers(device,
     78            &io_reg_base, &io_reg_size, &irq);
    12679
    127         if (ret != EOK) {
    128                 usb_log_error(
    129                     "Failed(%d) to get I/O registers addresses for device:.\n",
    130                     ret, device->handle);
    131                 return ret;
     80        if (rc != EOK) {
     81                usb_log_error("Failed(%d) to get I/O registers addresses for device:.\n",
     82                    rc, device->handle);
     83                return rc;
    13284        }
    13385
     
    13587            io_reg_base, io_reg_size, irq);
    13688
    137 
    138   sysarg_t apic;
    139   sysarg_t i8259;
    140         int irc_phone = -1;
    141         int irc_service = 0;
    142 
    143   if ((sysinfo_get_value("apic", &apic) == EOK) && (apic)) {
    144     irc_service = SERVICE_APIC;
    145                 usb_log_debug("SERVICE_APIC\n");
    146         } else if ((sysinfo_get_value("i8259", &i8259) == EOK) && (i8259)) {
    147     irc_service = SERVICE_I8259;
    148                 usb_log_debug("SERVICE_I8259\n");
    149         }
    150 
    151   if (irc_service) {
    152     while (irc_phone < 0)
    153       irc_phone = service_connect_blocking(irc_service, 0, 0);
    154   }
    155         usb_log_debug("Interrupt conttroller phone: %d\n", irc_phone);
    156 
    157         async_msg_1(irc_phone, IRC_ENABLE_INTERRUPT, irq);
    158         async_hangup(irc_phone);
    159 
    160         ret = register_interrupt_handler(device, irq, irq_handler, &uhci_code);
    161         usb_log_debug("Registered interrupt handler %d.\n", ret);
    162 
    16389        uhci_t *uhci_hc = malloc(sizeof(uhci_t));
    16490        if (!uhci_hc) {
    165                 usb_log_error("Failed to allocate memory for uhci hcd driver.\n");
     91                usb_log_error("Failed to allocaete memory for uhci hcd driver.\n");
    16692                return ENOMEM;
    16793        }
    16894
    169         ret = uhci_init(uhci_hc, (void*)io_reg_base, io_reg_size);
     95        int ret = uhci_init(uhci_hc, (void*)io_reg_base, io_reg_size);
    17096        if (ret != EOK) {
    17197                usb_log_error("Failed to init uhci-hcd.\n");
     
    174100        device_t *rh;
    175101        ret = setup_root_hub(&rh, device);
     102
    176103        if (ret != EOK) {
    177104                usb_log_error("Failed to setup uhci root hub.\n");
     
    191118        return EOK;
    192119}
    193 /*----------------------------------------------------------------------------*/
     120
     121static driver_ops_t uhci_driver_ops = {
     122        .add_device = uhci_add_device,
     123};
     124
     125static driver_t uhci_driver = {
     126        .name = NAME,
     127        .driver_ops = &uhci_driver_ops
     128};
     129
    194130int main(int argc, char *argv[])
    195131{
    196         sleep(3);
    197         usb_log_enable(USB_LOG_LEVEL_DEBUG, NAME);
     132        /*
     133         * Do some global initializations.
     134         */
     135        sleep(5);
     136        usb_log_enable(USB_LOG_LEVEL_INFO, NAME);
    198137
    199138        return driver_main(&uhci_driver);
Note: See TracChangeset for help on using the changeset viewer.