Changeset ec29b2a in rtems-libbsd


Ignore:
Timestamp:
Nov 7, 2017, 3:17:55 PM (20 months ago)
Author:
Christian Mauderer <Christian.Mauderer@…>
Branches:
eeb3fd5d9b07ac9a2e280cff60a1b762bd273a8d, 1e989998de954bef51e6c19cc3d64d39f32100aa
Children:
e7f3260
Parents:
ea5880a
git-author:
Christian Mauderer <Christian.Mauderer@…> (11/07/17 15:17:55)
git-committer:
Sebastian Huber <sebastian.huber@…> (11/10/17 13:13:15)
Message:

at91_mci: Port to RTEMS and adapt for atsam.

Files:
1 added
5 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/arm/at91/at91_mci.c

    rea5880a rec29b2a  
    3333__FBSDID("$FreeBSD$");
    3434
    35 #include <rtems/bsd/sys/param.h>
     35#include <sys/param.h>
    3636#include <sys/systm.h>
    3737#include <sys/bus.h>
     
    6666#include <rtems/bsd/local/opt_at91.h>
    6767
     68#ifdef __rtems__
     69#include <bsp.h>
     70#endif /* __rtems__ */
     71#if defined(__rtems) && defined(LIBBSP_ARM_ATSAM_BSP_H)
     72#ifdef __rtems__
     73#include <libchip/chip.h>
     74
     75#define AT91_MCI_HAS_4WIRE 1
     76
     77uint32_t at91_master_clock = BOARD_MCK;
     78
     79static sXdmad *pXdmad = &XDMAD_Instance;
     80#endif /* __rtems__ */
    6881/*
    6982 * About running the MCI bus above 25MHz
     
    160173        uint32_t     bbuf_curidx;         /* which bbuf is the active DMA buffer */
    161174        uint32_t     xfer_offset;         /* offset so far into caller's buf */
     175#ifdef __rtems__
     176        uint32_t xdma_tx_channel;
     177        uint32_t xdma_rx_channel;
     178        uint8_t xdma_tx_perid;
     179        uint8_t xdma_rx_perid;
     180        sXdmadCfg xdma_tx_cfg;
     181        sXdmadCfg xdma_rx_cfg;
     182#endif /* __rtems__ */
    162183};
    163184
     
    172193static void at91_mci_deactivate(device_t dev);
    173194static int at91_mci_is_mci1rev2xx(void);
     195#ifdef __rtems__
     196static void at91_mci_read_done(struct at91_mci_softc *sc, uint32_t sr);
     197static void at91_mci_write_done(struct at91_mci_softc *sc, uint32_t sr);
     198#endif /* __rtems__ */
    174199
    175200#define AT91_MCI_LOCK(_sc)              mtx_lock(&(_sc)->sc_mtx)
     
    242267at91_mci_pdc_disable(struct at91_mci_softc *sc)
    243268{
     269#ifndef __rtems__
    244270        WR4(sc, PDC_PTCR, PDC_PTCR_TXTDIS | PDC_PTCR_RXTDIS);
    245271        WR4(sc, PDC_RPR, 0);
     
    251277        WR4(sc, PDC_TNPR, 0);
    252278        WR4(sc, PDC_TNCR, 0);
     279#else /* __rtems__ */
     280        /* On SAMV71 there is no PDC but a DMAC */
     281        XDMAD_StopTransfer(pXdmad, sc->xdma_rx_channel);
     282        XDMAD_StopTransfer(pXdmad, sc->xdma_tx_channel);
     283        WR4(sc, MCI_DMA, 0);
     284#endif /* __rtems__ */
    253285}
    254286
     
    272304
    273305        imr  = RD4(sc, MCI_IMR);
     306#ifndef __rtems__
    274307        mr   = RD4(sc, MCI_MR) & 0x7fff;
     308#else /* __rtems__ */
     309        mr   = RD4(sc, MCI_MR);
     310#endif /* __rtems__ */
    275311        sdcr = RD4(sc, MCI_SDCR);
    276312        dtor = RD4(sc, MCI_DTOR);
     
    306342        WR4(sc, MCI_IDR, 0xffffffff);           /* Turn off interrupts */
    307343        WR4(sc, MCI_DTOR, MCI_DTOR_DTOMUL_1M | 1);
     344#ifndef __rtems__
    308345        val = MCI_MR_PDCMODE;
     346#else /* __rtems__ */
     347        val = 0;
     348        val |= MCI_MR_RDPROOF | MCI_MR_WRPROOF;
     349#endif /* __rtems__ */
    309350        val |= 0x34a;                           /* PWSDIV = 3; CLKDIV = 74 */
    310351//      if (sc->sc_cap & CAP_MCI1_REV2XX)
     
    359400        int err, i;
    360401
     402#ifdef __rtems__
     403#ifdef LIBBSP_ARM_ATSAM_BSP_H
     404        PMC_EnablePeripheral(ID_HSMCI);
     405        sc->xdma_tx_channel = XDMAD_ALLOC_FAILED;
     406        sc->xdma_rx_channel = XDMAD_ALLOC_FAILED;
     407#endif /* LIBBSP_ARM_ATSAM_BSP_H */
     408#endif /* __rtems__ */
    361409        sctx = device_get_sysctl_ctx(dev);
    362410        soid = device_get_sysctl_tree(dev);
     
    364412        sc->dev = dev;
    365413        sc->sc_cap = 0;
     414#ifndef __rtems__
    366415        if (at91_is_rm92())
    367416                sc->sc_cap |= CAP_NEEDS_BYTESWAP;
     417#endif /* __rtems__ */
    368418        /*
    369419         * MCI1 Rev 2 controllers need some workarounds, flag if so.
     
    376426                goto out;
    377427
     428#ifdef __rtems__
     429        eXdmadRC rc;
     430
     431        /* Prepare some configurations so they don't have to be fetched on every
     432         * setup */
     433        sc->xdma_rx_perid = XDMAIF_Get_ChannelNumber(ID_HSMCI,
     434            XDMAD_TRANSFER_RX);
     435        sc->xdma_tx_perid = XDMAIF_Get_ChannelNumber(ID_HSMCI,
     436            XDMAD_TRANSFER_TX);
     437        memset(&sc->xdma_rx_cfg, 0, sizeof(sc->xdma_rx_cfg));
     438        sc->xdma_rx_cfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN |
     439            XDMAC_CC_MBSIZE_SINGLE | XDMAC_CC_DSYNC_PER2MEM |
     440            XDMAC_CC_SWREQ_HWR_CONNECTED | XDMAC_CC_MEMSET_NORMAL_MODE |
     441            XDMAC_CC_CSIZE_CHK_1 | XDMAC_CC_DWIDTH_WORD |
     442            XDMAC_CC_SIF_AHB_IF1 | XDMAC_CC_DIF_AHB_IF1 |
     443            XDMAC_CC_SAM_FIXED_AM | XDMAC_CC_DAM_INCREMENTED_AM |
     444            XDMAC_CC_PERID(
     445                XDMAIF_Get_ChannelNumber(ID_HSMCI,XDMAD_TRANSFER_RX));
     446        memset(&sc->xdma_tx_cfg, 0, sizeof(sc->xdma_tx_cfg));
     447        sc->xdma_tx_cfg.mbr_cfg = XDMAC_CC_TYPE_PER_TRAN |
     448            XDMAC_CC_MBSIZE_SINGLE | XDMAC_CC_DSYNC_MEM2PER |
     449            XDMAC_CC_SWREQ_HWR_CONNECTED | XDMAC_CC_MEMSET_NORMAL_MODE |
     450            XDMAC_CC_CSIZE_CHK_1 | XDMAC_CC_DWIDTH_WORD |
     451            XDMAC_CC_SIF_AHB_IF1 | XDMAC_CC_DIF_AHB_IF1 |
     452            XDMAC_CC_SAM_INCREMENTED_AM | XDMAC_CC_DAM_FIXED_AM |
     453            XDMAC_CC_PERID(
     454                XDMAIF_Get_ChannelNumber(ID_HSMCI,XDMAD_TRANSFER_TX));
     455
     456        sc->xdma_tx_channel = XDMAD_AllocateChannel(pXdmad,
     457            XDMAD_TRANSFER_MEMORY, ID_HSMCI);
     458        if (sc->xdma_tx_channel == XDMAD_ALLOC_FAILED)
     459                goto out;
     460
     461        /* FIXME: The two DMA channels are not really necessary for the driver.
     462         * But the XDMAD interface does not allow to allocate one and use it
     463         * into two directions. The current (2017-07-11) implementation of
     464         * the XDMAD interface should work with it. So we might could try it. */
     465        sc->xdma_rx_channel = XDMAD_AllocateChannel(pXdmad, ID_HSMCI,
     466            XDMAD_TRANSFER_MEMORY);
     467        if (sc->xdma_rx_channel == XDMAD_ALLOC_FAILED)
     468                goto out;
     469
     470        rc = XDMAD_PrepareChannel(pXdmad, sc->xdma_rx_channel);
     471        if (rc != XDMAD_OK)
     472                goto out;
     473
     474        rc = XDMAD_PrepareChannel(pXdmad, sc->xdma_tx_channel);
     475        if (rc != XDMAD_OK)
     476                goto out;
     477
     478#endif /* __rtems__ */
    378479        AT91_MCI_LOCK_INIT(sc);
    379480
     
    528629                    rman_get_rid(sc->irq_res), sc->irq_res);
    529630        sc->irq_res = NULL;
     631#ifdef __rtems__
     632        if (sc->xdma_rx_channel != XDMAD_ALLOC_FAILED) {
     633                XDMAD_FreeChannel(pXdmad, sc->xdma_rx_channel);
     634        }
     635        if (sc->xdma_tx_channel != XDMAD_ALLOC_FAILED) {
     636                XDMAD_FreeChannel(pXdmad, sc->xdma_tx_channel);
     637        }
     638#endif /* __rtems__ */
    530639        return;
    531640}
     
    535644{
    536645
     646#ifndef __rtems__
    537647        switch (soc_info.type) {
    538648        case AT91_T_SAM9260:
     
    546656                return (0);
    547657        }
     658#else /* __rtems__ */
     659        /* Currently only supports the SAM V71 */
     660        return (1);
     661#endif /* __rtems__ */
    548662}
    549663
     
    599713}
    600714
     715#ifdef __rtems__
     716static LinkedListDescriporView1 dma_desc[MAX_BLOCKS];
     717
     718static void
     719at91_mci_setup_xdma(struct at91_mci_softc *sc, bool read, uint32_t block_size,
     720    uint32_t number_blocks, bus_addr_t paddr, uint32_t len)
     721{
     722        sXdmadCfg *xdma_cfg;
     723        uint32_t xdma_channel;
     724        const uint32_t xdma_cndc = XDMAC_CNDC_NDVIEW_NDV1 |
     725            XDMAC_CNDC_NDE_DSCR_FETCH_EN |
     726            XDMAC_CNDC_NDSUP_SRC_PARAMS_UPDATED |
     727            XDMAC_CNDC_NDDUP_DST_PARAMS_UPDATED;
     728        const uint32_t sa_rdr = (uint32_t)(sc->mem_res->r_bushandle + MCI_RDR);
     729        const uint32_t da_tdr = (uint32_t)(sc->mem_res->r_bushandle + MCI_TDR);
     730        const uint32_t xdma_interrupt = XDMAC_CIE_BIE | XDMAC_CIE_DIE |
     731            XDMAC_CIE_FIE | XDMAC_CIE_RBIE | XDMAC_CIE_WBIE | XDMAC_CIE_ROIE;
     732        eXdmadRC rc;
     733        size_t i;
     734
     735        if (read) {
     736                xdma_cfg = &sc->xdma_rx_cfg;
     737                xdma_channel = sc->xdma_rx_channel;
     738        } else {
     739                xdma_cfg = &sc->xdma_tx_cfg;
     740                xdma_channel = sc->xdma_tx_channel;
     741        }
     742
     743        for (i = 0; i < number_blocks; ++i) {
     744                if (read) {
     745                        dma_desc[i].mbr_sa = sa_rdr;
     746                        dma_desc[i].mbr_da = ((uint32_t)paddr) + i * block_size;
     747                } else {
     748                        dma_desc[i].mbr_sa = ((uint32_t)paddr) + i * block_size;
     749                        dma_desc[i].mbr_da = da_tdr;
     750                }
     751                dma_desc[i].mbr_ubc = XDMA_UBC_NVIEW_NDV1 |
     752                    XDMA_UBC_NDEN_UPDATED | (block_size/4);
     753                if (i == number_blocks - 1) {
     754                        dma_desc[i].mbr_ubc |= XDMA_UBC_NDE_FETCH_DIS;
     755                        dma_desc[i].mbr_nda = 0;
     756                } else {
     757                        dma_desc[i].mbr_ubc |= XDMA_UBC_NDE_FETCH_EN;
     758                        dma_desc[i].mbr_nda = (uint32_t) &dma_desc[i+1];
     759                }
     760        }
     761
     762        rc = XDMAD_ConfigureTransfer(pXdmad, xdma_channel, xdma_cfg, xdma_cndc,
     763            (uint32_t)dma_desc, xdma_interrupt);
     764        if (rc != XDMAD_OK)
     765                panic("Could not configure XDMA: %d.", rc);
     766
     767        /* FIXME: Is that correct? */
     768        if (read) {
     769                rtems_cache_invalidate_multiple_data_lines(paddr, len);
     770        } else {
     771                rtems_cache_flush_multiple_data_lines(paddr, len);
     772        }
     773        rtems_cache_flush_multiple_data_lines(dma_desc, sizeof(dma_desc));
     774
     775        rc = XDMAD_StartTransfer(pXdmad, xdma_channel);
     776        if (rc != XDMAD_OK)
     777                panic("Could not start XDMA: %d.", rc);
     778
     779}
     780
     781#endif /* __rtems__ */
    601782static void
    602783at91_mci_start_cmd(struct at91_mci_softc *sc, struct mmc_command *cmd)
    603784{
    604785        uint32_t cmdr, mr;
     786#ifdef __rtems__
     787        uint32_t number_blocks;
     788        uint32_t block_size;
     789#endif /* __rtems__ */
    605790        struct mmc_data *data;
    606791
     
    695880         */
    696881
     882#ifndef __rtems__
    697883        WR4(sc, PDC_PTCR, PDC_PTCR_RXTDIS | PDC_PTCR_TXTDIS);
    698884
     
    700886        mr |=  min(data->len, 512) << 16;
    701887        WR4(sc, MCI_MR, mr | MCI_MR_PDCMODE|MCI_MR_PDCPADV);
     888#else /* __rtems__ */
     889        mr = RD4(sc,MCI_MR);
     890        WR4(sc, MCI_MR, mr | MCI_MR_PDCPADV);
     891
     892        WR4(sc, MCI_DMA, MCI_DMA_DMAEN | MCI_DMA_CHKSIZE_1);
     893
     894        block_size = min(data->len, 512);
     895        number_blocks = data->len / block_size;
     896        WR4(sc, MCI_BLKR, block_size << 16 | number_blocks);
     897#endif /* __rtems__ */
    702898
    703899        /*
     
    744940
    745941                if (data->flags & MMC_DATA_READ) {
     942#ifndef __rtems__
    746943                        if (remaining > 2048) // XXX
    747944                                len = remaining / 2;
    748945                        else
     946#else
     947                        /* FIXME: This reduces performance. Set up DMA in two
     948                         * parts instead like done on AT91. */
     949#endif /* __rtems__ */
    749950                                len = remaining;
    750951                        err = bus_dmamap_load(sc->dmatag, sc->bbuf_map[0],
     
    755956                        bus_dmamap_sync(sc->dmatag, sc->bbuf_map[0],
    756957                            BUS_DMASYNC_PREREAD);
     958#ifndef __rtems__
    757959                        WR4(sc, PDC_RPR, paddr);
    758960                        WR4(sc, PDC_RCR, len / 4);
     
    776978                        }
    777979                        WR4(sc, PDC_PTCR, PDC_PTCR_RXTEN);
     980#else /* __rtems__ */
     981                        at91_mci_setup_xdma(sc, true, block_size,
     982                            number_blocks, paddr, len);
     983
     984                        sc->bbuf_len[0] = len;
     985                        remaining -= len;
     986                        sc->bbuf_len[1] = 0;
     987                        if (remaining != 0)
     988                                panic("Still rx-data left. This should never happen.");
     989#endif /* __rtems__ */
    778990                } else {
    779991                        len = min(BBSIZE, remaining);
     
    786998                        bus_dmamap_sync(sc->dmatag, sc->bbuf_map[0],
    787999                            BUS_DMASYNC_PREWRITE);
     1000#ifndef __rtems__
    7881001                        /*
    7891002                         * Erratum workaround:  PDC transfer length on a write
     
    8141027                        }
    8151028                        /* do not enable PDC xfer until CMDRDY asserted */
     1029#else /* __rtems__ */
     1030                        at91_mci_setup_xdma(sc, false, block_size,
     1031                            number_blocks, paddr, len);
     1032
     1033                        sc->bbuf_len[0] = len;
     1034                        remaining -= len;
     1035                        sc->bbuf_len[1] = 0;
     1036                        if (remaining != 0)
     1037                                panic("Still tx-data left. This should never happen.");
     1038
     1039#endif /* __rtems__ */
    8161040                }
    8171041                data->xfer_len = 0; /* XXX what's this? appears to be unused. */
     
    9221146         */
    9231147
     1148#ifndef __rtems__
    9241149        bus_dmamap_sync(sc->dmatag, sc->bbuf_map[curidx], BUS_DMASYNC_POSTREAD);
    9251150        bus_dmamap_unload(sc->dmatag, sc->bbuf_map[curidx]);
     1151#endif /* __rtems__ */
    9261152
    9271153        at91_bswap_buf(sc, dataptr + sc->xfer_offset, sc->bbuf_vaddr[curidx], len);
     
    9481174        } else {
    9491175                WR4(sc, PDC_RNCR, 0);
     1176#ifndef __rtems__
    9501177                WR4(sc, MCI_IER, MCI_SR_ERROR | MCI_SR_ENDRX);
     1178#else /* __rtems__ */
     1179                WR4(sc, MCI_IER, MCI_SR_ERROR | MCI_SR_XFRDONE);
     1180#endif /* __rtems__ */
    9511181        }
    9521182}
     
    11431373        if (cmd->data) {
    11441374                uint32_t ier;
     1375#ifndef __rtems__
    11451376                if (cmd->data->flags & MMC_DATA_READ) {
    11461377                        ier = MCI_SR_ENDRX;
     
    11491380                        WR4(sc, PDC_PTCR, PDC_PTCR_TXTEN);
    11501381                }
     1382#else /* __rtems__ */
     1383                ier = MCI_SR_XFRDONE;
     1384#endif /* __rtems__ */
    11511385                WR4(sc, MCI_IER, MCI_SR_ERROR | ier);
    11521386                return;
     
    12101444                at91_mci_next_operation(sc);
    12111445        } else {
     1446#ifndef __rtems__
    12121447                if (isr & MCI_SR_TXBUFE) {
    12131448//                      printf("TXBUFE\n");
     
    12341469                        at91_mci_read_done(sc, sr);
    12351470                }
     1471#else /* __rtems__ */
     1472                if (isr & MCI_SR_XFRDONE) {
     1473                        struct mmc_command *cmd = sc->curcmd;
     1474                        if (cmd->data->flags & MMC_DATA_READ) {
     1475                                at91_mci_read_done(sc, sr);
     1476                        } else {
     1477                                if (sr & MCI_SR_BLKE)
     1478                                        isr |= MCI_SR_BLKE;
     1479                                else
     1480                                        WR4(sc, MCI_IER, MCI_SR_BLKE);
     1481                        }
     1482                }
     1483#endif /* __rtems__ */
    12361484                if (isr & MCI_SR_NOTBUSY) {
    12371485//                      printf("NOTBUSY\n");
     
    13961644static devclass_t at91_mci_devclass;
    13971645
     1646#ifndef __rtems__
    13981647#ifdef FDT
    13991648DRIVER_MODULE(at91_mci, simplebus, at91_mci_driver, at91_mci_devclass, NULL,
     
    14051654
    14061655MMC_DECLARE_BRIDGE(at91_mci);
     1656#else /* __rtems__ */
     1657DRIVER_MODULE(at91_mci, nexus, at91_mci_driver, at91_mci_devclass, NULL, NULL);
     1658#endif /* __rtems__ */
    14071659DRIVER_MODULE(mmc, at91_mci, mmc_driver, mmc_devclass, NULL, NULL);
    14081660MODULE_DEPEND(at91_mci, mmc, 1, 1, 1);
     1661#endif /* __rtems__ && LIBBSP_ARM_ATSAM_BSP_H */
  • freebsd/sys/arm/at91/at91_mcireg.h

    rea5880a rec29b2a  
    3838#define MCI_ARGR        0x10    /* MCI Argument Register */
    3939#define MCI_CMDR        0x14    /* MCI Command Register */
     40#ifdef __rtems__
     41#define MCI_BLKR        0x18    /* MCI Block Register */
     42#endif /* __rtems__ */
    4043#define MCI_RSPR        0x20    /* MCI Response Registers - 4 of them */
    4144#define MCI_RDR         0x30    /* MCI Receive Data Register */
     
    4548#define MCI_IDR         0x48    /* MCI Interrupt Disable Register */
    4649#define MCI_IMR         0x4c    /* MCI Interrupt Mask Register */
     50#ifdef __rtems__
     51#define MCI_DMA         0x50    /* MCI DMA Control Register */
     52#endif /* __rtems__ */
    4753
    4854/* -------- MCI_CR : (MCI Offset: 0x0) MCI Control Register --------  */
     
    6066#define MCI_MR_PDCPADV     (0x1u << 14) /* (MCI) PDC Padding Value */
    6167#define MCI_MR_PDCMODE     (0x1u << 15) /* (MCI) PDC Oriented Mode */
     68#define MCI_MR_CLKODD      (0x1u << 16) /* (MCI) Clock Divider is Odd */
    6269#define MCI_MR_BLKLEN      0x3fff0000ul /* (MCI) Data Block Length */
    6370/* -------- MCI_DTOR : (MCI Offset: 0x8) MCI Data Timeout Register --------  */
     
    98105#define         MCI_CMDR_TRTYP_MULTIPLE             (0x1u << 19) /* (MCI) Multiple Block transfer type */
    99106#define         MCI_CMDR_TRTYP_STREAM               (0x2u << 19) /* (MCI) Stream transfer type */
     107#ifdef __rtems__
     108/* -------- MCI_BLKR : (MCI Offset: 0x18) MCI Block Register --------  */
     109#define MCI_BLKR_BCNT        (0xFFFFu << 0)
     110#define MCI_BLKR_BLKLEN      (0xFFFFu << 16)
     111#endif /* __rtems__ */
    100112/* -------- MCI_SR : (MCI Offset: 0x40) MCI Status Register --------  */
    101113#define MCI_SR_CMDRDY   (0x1u <<  0) /* (MCI) Command Ready flag */
     
    118130#define MCI_SR_OVRE     (0x1u << 30) /* (MCI) Overrun flag */
    119131#define MCI_SR_UNRE     (0x1u << 31) /* (MCI) Underrun flag */
     132#ifdef __rtems__
     133#define MCI_SR_XFRDONE  (0x1u << 27) /* (MCI) Underrun flag */
     134#endif /* __rtems__ */
     135#ifdef __rtems__
     136/* -------- MCI_DMA : (MCI Offset: 0x50) MCI DMA Control Register --------  */
     137#define MCI_DMA_DMAEN        (0x1u << 8)
     138#define MCI_DMA_CHKSIZE      (0x7u << 4)
     139#define         MCI_DMA_CHKSIZE_1      (0x0u << 4)
     140#define         MCI_DMA_CHKSIZE_2      (0x1u << 4)
     141#define         MCI_DMA_CHKSIZE_4      (0x2u << 4)
     142#define         MCI_DMA_CHKSIZE_8      (0x3u << 4)
     143#define         MCI_DMA_CHKSIZE_16     (0x4u << 4)
     144#endif /* __rtems__ */
    120145
    121146/*      TXRDY,DTIP,ENDTX,TXBUFE,RTOE */
  • libbsd.py

    rea5880a rec29b2a  
    484484    mod.addKernelSpaceHeaderFiles(
    485485        [
     486            'sys/arm/at91/at91_mcireg.h',
     487            'sys/arm/at91/at91_pdcreg.h',
     488            'sys/arm/at91/at91reg.h',
     489            'sys/arm/at91/at91var.h',
    486490            'sys/dev/mmc/bridge.h',
    487491            'sys/dev/mmc/mmcbrvar.h',
     
    491495            'sys/dev/mmc/mmc_subr.h',
    492496            'sys/dev/mmc/mmcvar.h',
     497            'sys/sys/watchdog.h',
    493498        ]
    494499    )
    495500    mod.addKernelSpaceSourceFiles(
    496501        [
     502            'sys/arm/at91/at91_mci.c',
    497503            'sys/dev/mmc/mmc.c',
    498504            'sys/dev/mmc/mmcsd.c',
  • libbsd_waf.py

    rea5880a rec29b2a  
    16861686    libbsd_use += ["objs09"]
    16871687
    1688     source = ['freebsd/sys/arm/lpc/if_lpe.c',
     1688    source = ['freebsd/sys/arm/at91/at91_mci.c',
     1689              'freebsd/sys/arm/lpc/if_lpe.c',
    16891690              'freebsd/sys/arm/lpc/lpc_pwr.c',
    16901691              'freebsd/sys/arm/ti/am335x/am335x_musb.c',
  • rtemsbsd/include/machine/rtems-bsd-nexus-bus.h

    rea5880a rec29b2a  
    230230    RTEMS_BSD_DEFINE_NEXUS_DEVICE(dw_mmc, 0, 0, NULL)
    231231#endif /* RTEMS_BSD_DRIVER_DWC_MMC */
     232
     233/*
     234 * Atmel Media Card Interface (MCI).
     235 */
     236#if !defined(RTEMS_BSD_DRIVER_AT91_MCI0)
     237  #define RTEMS_BSD_DRIVER_AT91_MCI0(_base, _irq)                  \
     238    static const rtems_bsd_device_resource at91_mci0_res[] = {     \
     239      {                                                            \
     240        .type = RTEMS_BSD_RES_MEMORY,                              \
     241        .start_request = 0,                                        \
     242        .start_actual = (_base)                                    \
     243      }, {                                                         \
     244        .type = RTEMS_BSD_RES_IRQ,                                 \
     245        .start_request = 0,                                        \
     246        .start_actual = (_irq)                                     \
     247      }                                                            \
     248    };                                                             \
     249    RTEMS_BSD_DEFINE_NEXUS_DEVICE(at91_mci, 0,                     \
     250                                  RTEMS_ARRAY_SIZE(at91_mci0_res), \
     251                                  &at91_mci0_res[0])
     252#endif /* RTEMS_BSD_DRIVER_DWC0 */
    232253
    233254/*
Note: See TracChangeset for help on using the changeset viewer.