Changeset 3e200736 in mainline for uspace/drv/bus/usb


Ignore:
Timestamp:
2014-01-18T21:34:32Z (12 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a5361fb
Parents:
e26a9d95
Message:

uhci,ohci, ehci: Move interrupt replacement fibril to libusbhost

Location:
uspace/drv/bus/usb
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/bus/usb/ehci/hc.c

    re26a9d95 r3e200736  
    9292static void hc_start(hc_t *instance);
    9393static int hc_init_memory(hc_t *instance);
    94 static int interrupt_emulator(hc_t *instance);
    9594
    9695/** Generate IRQ code.
     
    191190        hc_gain_control(instance);
    192191
    193         if (!interrupts) {
    194                 instance->interrupt_emulator =
    195                     fibril_create((int(*)(void*))interrupt_emulator, instance);
    196                 fibril_add_ready(instance->interrupt_emulator);
    197         }
    198 
    199192        ehci_rh_init(
    200193            &instance->rh, instance->caps, instance->registers, "ehci rh");
     
    256249}
    257250
    258 /** Check status register regularly
    259  *
    260  * @param[in] instance EHCI hc driver structure.
    261  * @return Error code
    262  */
    263 int interrupt_emulator(hc_t *instance)
    264 {
    265         assert(instance);
    266         usb_log_info("Started interrupt emulator.\n");
    267         while (1) {
    268 //              const uint32_t status = instance->registers->interrupt_status;
    269 //              instance->registers->interrupt_status = status;
    270 //              hc_interrupt(instance, status);
    271                 async_usleep(10000);
    272         }
    273         return EOK;
    274 }
    275 
    276251/** Turn off any (BIOS)driver that might be in control of the device.
    277252 *
  • uspace/drv/bus/usb/ehci/hc.h

    re26a9d95 r3e200736  
    6464        list_t pending_batches;
    6565
    66         /** Fibril for periodic checks if interrupts can't be used */
    67         fid_t interrupt_emulator;
    68 
    6966        /** Guards schedule and endpoint manipulation */
    7067        fibril_mutex_t guard;
  • uspace/drv/bus/usb/ohci/hc.c

    re26a9d95 r3e200736  
    9393static int hc_init_transfer_lists(hc_t *instance);
    9494static int hc_init_memory(hc_t *instance);
    95 static int interrupt_emulator(hc_t *instance);
    9695
    9796/** Generate IRQ code.
     
    182181
    183182        hc_gain_control(instance);
    184 
    185         if (!interrupts) {
    186                 instance->interrupt_emulator =
    187                     fibril_create((int(*)(void*))interrupt_emulator, instance);
    188                 fibril_add_ready(instance->interrupt_emulator);
    189         }
    190183
    191184        ohci_rh_init(&instance->rh, instance->registers, "ohci rh");
     
    280273        assert(instance);
    281274
    282         async_usleep(10000);
    283275        if (instance->registers){
    284276                *status = OHCI_RD(instance->registers->interrupt_status);
     
    373365        }
    374366
    375 }
    376 
    377 /** Check status register regularly
    378  *
    379  * @param[in] instance OHCI hc driver structure.
    380  * @return Error code
    381  */
    382 int interrupt_emulator(hc_t *instance)
    383 {
    384         assert(instance);
    385         usb_log_info("Started interrupt emulator.\n");
    386         while (1) {
    387                 const uint32_t status = instance->registers->interrupt_status;
    388                 instance->registers->interrupt_status = status;
    389                 hc_interrupt(instance, status);
    390                 async_usleep(10000);
    391         }
    392         return EOK;
    393367}
    394368
  • uspace/drv/bus/usb/uhci/hc.c

    re26a9d95 r3e200736  
    9696static int hc_init_transfer_lists(hc_t *instance);
    9797
    98 static int hc_interrupt_emulator(void *arg);
    9998static int hc_debug_checker(void *arg);
    10099
     
    245244
    246245        hc_init_hw(instance);
    247         if (!interrupts) {
    248                 instance->interrupt_emulator =
    249                     fibril_create(hc_interrupt_emulator, instance);
    250                 fibril_add_ready(instance->interrupt_emulator);
    251         }
    252246        (void)hc_debug_checker;
    253247
     
    460454}
    461455
    462 /** Polling function, emulates interrupts.
    463  *
    464  * @param[in] arg UHCI hc structure to use.
    465  * @return EOK (should never return)
    466  */
    467 int hc_interrupt_emulator(void* arg)
    468 {
    469         usb_log_debug("Started interrupt emulator.\n");
    470         hc_t *instance = arg;
    471         assert(instance);
    472 
    473         while (1) {
    474                 /* Read and clear status register */
    475                 uint16_t status = pio_read_16(&instance->registers->usbsts);
    476                 pio_write_16(&instance->registers->usbsts, status);
    477                 if (status != 0)
    478                         usb_log_debug2("UHCI status: %x.\n", status);
    479                 hc_interrupt(instance, status);
    480                 async_usleep(UHCI_INT_EMULATOR_TIMEOUT);
    481         }
    482         return EOK;
    483 }
    484 
    485456/** Debug function, checks consistency of memory structures.
    486457 *
  • uspace/drv/bus/usb/uhci/hc.h

    re26a9d95 r3e200736  
    9393
    9494#define UHCI_FRAME_LIST_COUNT 1024
    95 #define UHCI_INT_EMULATOR_TIMEOUT 10000
    9695#define UHCI_DEBUGER_TIMEOUT 5000000
    9796#define UHCI_ALLOWED_HW_FAIL 5
    98 #define UHCI_NEEDED_IRQ_COMMANDS 5
    9997
    10098/** Main UHCI driver structure */
     
    118116        /** Pointer table to the above lists, helps during scheduling */
    119117        transfer_list_t *transfers[2][4];
    120         /** Fibril periodically checking status register*/
    121         fid_t interrupt_emulator;
    122118        /** Indicator of hw interrupts availability */
    123119        bool hw_interrupts;
Note: See TracChangeset for help on using the changeset viewer.