Changeset 7d6a676 in mainline


Ignore:
Timestamp:
2011-03-21T14:20:23Z (13 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
5d1db18
Parents:
925e099
Message:

Add interrupt emulator

Location:
uspace/drv
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • uspace/drv/ohci/hc.c

    r925e099 r7d6a676  
    4545#include "hc.h"
    4646
    47 static int dummy_reset(int foo, void *arg)
    48 {
    49         hc_t *hc = (hc_t*)arg;
    50         assert(hc);
    51         hc->rh.address = 0;
    52         return EOK;
    53 }
     47static int dummy_reset(int foo, void *arg);
     48static int interrupt_emulator(hc_t *instance);
    5449/*----------------------------------------------------------------------------*/
    5550int hc_init(hc_t *instance, ddf_fun_t *fun, ddf_dev_t *dev,
     
    6661        instance->ddf_instance = fun;
    6762        device_keeper_init(&instance->manager);
     63
     64        if (!interrupts) {
     65                instance->interrupt_emulator =
     66                    fibril_create((int(*)(void*))interrupt_emulator, instance);
     67                fibril_add_ready(instance->interrupt_emulator);
     68        }
    6869
    6970
     
    117118}
    118119/*----------------------------------------------------------------------------*/
    119 void hc_interrupt(hc_t *instance, uint16_t status)
     120void hc_interrupt(hc_t *instance, uint32_t status)
    120121{
    121122        assert(instance);
    122         /* TODO: Check for interrupt cause */
    123         rh_interrupt(&instance->rh);
     123        if (status == 0)
     124                return;
     125        if (status & IS_RHSC)
     126                rh_interrupt(&instance->rh);
     127
     128        /* TODO: Check for further interrupt causes */
    124129        /* TODO: implement */
     130}
     131/*----------------------------------------------------------------------------*/
     132static int dummy_reset(int foo, void *arg)
     133{
     134        hc_t *hc = (hc_t*)arg;
     135        assert(hc);
     136        hc->rh.address = 0;
     137        return EOK;
     138}
     139/*----------------------------------------------------------------------------*/
     140static int interrupt_emulator(hc_t *instance)
     141{
     142        assert(instance);
     143        usb_log_info("Started interrupt emulator.\n");
     144        while (1) {
     145                uint32_t status = instance->registers->interrupt_status;
     146                instance->registers->interrupt_status = status;
     147                hc_interrupt(instance, status);
     148                async_usleep(1000);
     149        }
     150        return EOK;
    125151}
    126152/**
  • uspace/drv/ohci/hc.h

    r925e099 r7d6a676  
    5454        ddf_fun_t *ddf_instance;
    5555        device_keeper_t manager;
     56        fid_t interrupt_emulator;
    5657} hc_t;
    5758
     
    6364int hc_schedule(hc_t *instance, batch_t *batch);
    6465
    65 void hc_interrupt(hc_t *instance, uint16_t status);
     66void hc_interrupt(hc_t *instance, uint32_t status);
    6667
    6768/** Safely dispose host controller internal structures
  • uspace/drv/ohci/ohci_regs.h

    r925e099 r7d6a676  
    4343        volatile uint32_t command_status;
    4444        volatile uint32_t interrupt_status;
     45#define IS_SO (1 << 0)
     46#define IS_WDH (1 << 1)
     47#define IS_SF (1 << 2)
     48#define IS_RD (1 << 3)
     49#define IS_UE (1 << 4)
     50#define IS_FNO (1 << 5)
     51#define IS_RHSC (1 << 6)
     52#define IS_OC (1 << 30)
    4553        volatile uint32_t interupt_enable;
    4654#define IE_SO   (1 << 0)
  • uspace/drv/uhci-hcd/uhci_hc.c

    r925e099 r7d6a676  
    121121                    fibril_create(uhci_hc_interrupt_emulator, instance);
    122122                fibril_add_ready(instance->cleaner);
     123        } else {
     124                /* TODO: enable interrupts here */
    123125        }
    124126
Note: See TracChangeset for help on using the changeset viewer.