本文整理汇总了C++中bus_dmamap_unload函数的典型用法代码示例。如果您正苦于以下问题:C++ bus_dmamap_unload函数的具体用法?C++ bus_dmamap_unload怎么用?C++ bus_dmamap_unload使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了bus_dmamap_unload函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: msi_eq_free
void
msi_eq_free(bus_dma_tag_t t, struct msi_eq *meq)
{
bus_size_t size;
size = roundup(meq->meq_nentries * sizeof(struct msi_msg), PAGE_SIZE);
bus_dmamap_unload(t, meq->meq_map);
bus_dmamem_unmap(t, meq->meq_va, size);
bus_dmamem_free(t, &meq->meq_seg, 1);
bus_dmamap_destroy(t, meq->meq_map);
free(meq, M_DEVBUF, 0);
}
开发者ID:DavidAlphaFox,项目名称:openbsd-kernel,代码行数:13,代码来源:msi.c
示例2: aha_free
void
aha_free(struct aha_softc *aha)
{
switch (aha->init_level) {
default:
case 8:
{
struct sg_map_node *sg_map;
while ((sg_map = SLIST_FIRST(&aha->sg_maps))!= NULL) {
SLIST_REMOVE_HEAD(&aha->sg_maps, links);
bus_dmamap_unload(aha->sg_dmat, sg_map->sg_dmamap);
bus_dmamem_free(aha->sg_dmat, sg_map->sg_vaddr,
sg_map->sg_dmamap);
free(sg_map, M_DEVBUF);
}
bus_dma_tag_destroy(aha->sg_dmat);
}
case 7:
bus_dmamap_unload(aha->ccb_dmat, aha->ccb_dmamap);
case 6:
bus_dmamem_free(aha->ccb_dmat, aha->aha_ccb_array,
aha->ccb_dmamap);
case 5:
bus_dma_tag_destroy(aha->ccb_dmat);
case 4:
bus_dmamap_unload(aha->mailbox_dmat, aha->mailbox_dmamap);
case 3:
bus_dmamem_free(aha->mailbox_dmat, aha->in_boxes,
aha->mailbox_dmamap);
case 2:
bus_dma_tag_destroy(aha->buffer_dmat);
case 1:
bus_dma_tag_destroy(aha->mailbox_dmat);
case 0:
break;
}
mtx_destroy(&aha->lock);
}
开发者ID:2trill2spill,项目名称:freebsd,代码行数:39,代码来源:aha.c
示例3: mrsas_unmap_request
/*
* mrsas_unmap_request: Unmap and unload data
* input: Adapter instance soft state
* Pointer to command packet
*
* This function unmaps and unloads data from OS.
*/
void
mrsas_unmap_request(struct mrsas_softc *sc, struct mrsas_mpt_cmd *cmd)
{
if (cmd->data != NULL) {
if (cmd->flags & MRSAS_DIR_IN)
bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTREAD);
if (cmd->flags & MRSAS_DIR_OUT)
bus_dmamap_sync(sc->data_tag, cmd->data_dmamap, BUS_DMASYNC_POSTWRITE);
mtx_lock(&sc->io_lock);
bus_dmamap_unload(sc->data_tag, cmd->data_dmamap);
mtx_unlock(&sc->io_lock);
}
}
开发者ID:chubbymaggie,项目名称:freebsd,代码行数:20,代码来源:mrsas_cam.c
示例4: pdq_os_databuf_free
extern void
pdq_os_databuf_free(
pdq_os_ctx_t *sc,
struct mbuf *m)
{
if (m->m_flags & (M_HASRXDMAMAP|M_HASTXDMAMAP)) {
bus_dmamap_t map = M_GETCTX(m, bus_dmamap_t);
bus_dmamap_unload(sc->sc_dmatag, map);
bus_dmamap_destroy(sc->sc_dmatag, map);
m->m_flags &= ~(M_HASRXDMAMAP|M_HASTXDMAMAP);
}
m_freem(m);
}
开发者ID:coyizumi,项目名称:cs111,代码行数:13,代码来源:pdq_ifsubr.c
示例5: esp_pci_dma_stop
static void
esp_pci_dma_stop(struct ncr53c9x_softc *sc)
{
struct esp_pci_softc *esc = (struct esp_pci_softc *)sc;
/* DMA stop */
/* XXX what should we do here ? */
WRITE_DMAREG(esc, DMA_CMD,
DMACMD_ABORT | (esc->sc_datain != 0 ? DMACMD_DIR : 0));
bus_dmamap_unload(esc->sc_xferdmat, esc->sc_xferdmam);
esc->sc_active = 0;
}
开发者ID:2asoft,项目名称:freebsd,代码行数:13,代码来源:esp_pci.c
示例6: s3c2440_i2s_xfer_complete
static void
s3c2440_i2s_xfer_complete(dmac_xfer_t xfer, void *cookie)
{
struct s3c2xx0_softc *sc = s3c2xx0_softc; /* Shortcut */
s3c2440_i2s_buf_t buf = cookie;
struct s3c2440_i2s_softc *i2s = buf->i2b_parent;
bus_dmamap_unload(sc->sc_dmat, buf->i2b_dmamap);
mutex_spin_enter(i2s->sc_intr_lock);
(buf->i2b_cb)(buf->i2b_cb_cookie);
mutex_spin_exit(i2s->sc_intr_lock);
}
开发者ID:krytarowski,项目名称:netbsd-current-src-sys,代码行数:13,代码来源:s3c2440_i2s.c
示例7: pcscp_dma_stop
void
pcscp_dma_stop(struct ncr53c9x_softc *sc)
{
struct pcscp_softc *esc = (struct pcscp_softc *)sc;
/* dma stop */
/* XXX What should we do here ? */
WRITE_DMAREG(esc, DMA_CMD,
DMACMD_ABORT | (esc->sc_datain ? DMACMD_DIR : 0));
bus_dmamap_unload(esc->sc_dmat, esc->sc_xfermap);
esc->sc_active = 0;
}
开发者ID:repos-holder,项目名称:openbsd-patches,代码行数:13,代码来源:pcscp.c
示例8: bce_stop
/* Stop transmission on the interface */
void
bce_stop(struct ifnet *ifp, int disable)
{
struct bce_softc *sc = ifp->if_softc;
int i;
u_int32_t val;
/* Stop the 1 second timer */
timeout_del(&sc->bce_timeout);
/* Mark the interface down and cancel the watchdog timer. */
ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
ifp->if_timer = 0;
/* Down the MII. */
mii_down(&sc->bce_mii);
/* Disable interrupts. */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_INT_MASK, 0);
sc->bce_intmask = 0;
delay(10);
/* Disable emac */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_ENET_CTL, EC_ED);
for (i = 0; i < 200; i++) {
val = bus_space_read_4(sc->bce_btag, sc->bce_bhandle,
BCE_ENET_CTL);
if (!(val & EC_ED))
break;
delay(10);
}
/* Stop the DMA */
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_DMA_RXCTL, 0);
bus_space_write_4(sc->bce_btag, sc->bce_bhandle, BCE_DMA_TXCTL, 0);
delay(10);
/* Release any queued transmit buffers. */
for (i = 0; i < BCE_NTXDESC; i++) {
if (sc->bce_cdata.bce_tx_chain[i] != NULL) {
bus_dmamap_unload(sc->bce_dmatag,
sc->bce_cdata.bce_tx_map[i]);
m_freem(sc->bce_cdata.bce_tx_chain[i]);
sc->bce_cdata.bce_tx_chain[i] = NULL;
}
}
/* drain receive queue */
if (disable)
bce_rxdrain(sc);
}
开发者ID:repos-holder,项目名称:openbsd-patches,代码行数:52,代码来源:if_bce.c
示例9: ips_send_adapter_info_cmd
static int ips_send_adapter_info_cmd(ips_command_t *command)
{
int error = 0;
ips_softc_t *sc = command->sc;
ips_cmd_status_t *status = command->arg;
if (bus_dma_tag_create( /* parent */ sc->adapter_dmatag,
/* alignemnt */ 1,
/* boundary */ 0,
/* lowaddr */ BUS_SPACE_MAXADDR_32BIT,
/* highaddr */ BUS_SPACE_MAXADDR,
/* filter */ NULL,
/* filterarg */ NULL,
/* maxsize */ IPS_ADAPTER_INFO_LEN,
/* numsegs */ 1,
/* maxsegsize*/ IPS_ADAPTER_INFO_LEN,
/* flags */ 0,
&command->data_dmatag) != 0) {
printf("ips: can't alloc dma tag for adapter status\n");
error = ENOMEM;
goto exit;
}
if(bus_dmamem_alloc(command->data_dmatag, &command->data_buffer,
BUS_DMA_NOWAIT, &command->data_dmamap)){
error = ENOMEM;
goto exit;
}
command->callback = ips_wakeup_callback;
asleep(status, 0, "ips", 30*hz);
bus_dmamap_load(command->data_dmatag, command->data_dmamap,
command->data_buffer,IPS_ADAPTER_INFO_LEN,
ips_adapter_info_callback, command, BUS_DMA_NOWAIT);
if (await(-1, -1))
error = ETIMEDOUT;
else {
bus_dmamap_sync(command->data_dmatag, command->data_dmamap,
BUS_DMASYNC_POSTREAD);
memcpy(&(sc->adapter_info), command->data_buffer,
IPS_ADAPTER_INFO_LEN);
}
bus_dmamap_unload(command->data_dmatag, command->data_dmamap);
exit:
/* I suppose I should clean up my memory allocations */
bus_dmamem_free(command->data_dmatag, command->data_buffer,
command->data_dmamap);
bus_dma_tag_destroy(command->data_dmatag);
ips_insert_free_cmd(sc, command);
return error;
}
开发者ID:UnitedMarsupials,项目名称:kame,代码行数:51,代码来源:ips_commands.c
示例10: cas_encap
int
cas_encap(struct cas_softc *sc, struct mbuf *mhead, u_int32_t *bixp)
{
u_int64_t flags;
u_int32_t cur, frag, i;
bus_dmamap_t map;
cur = frag = *bixp;
map = sc->sc_txd[cur].sd_map;
if (bus_dmamap_load_mbuf(sc->sc_dmatag, map, mhead,
BUS_DMA_NOWAIT) != 0) {
return (ENOBUFS);
}
if ((sc->sc_tx_cnt + map->dm_nsegs) > (CAS_NTXDESC - 2)) {
bus_dmamap_unload(sc->sc_dmatag, map);
return (ENOBUFS);
}
bus_dmamap_sync(sc->sc_dmatag, map, 0, map->dm_mapsize,
BUS_DMASYNC_PREWRITE);
for (i = 0; i < map->dm_nsegs; i++) {
sc->sc_txdescs[frag].cd_addr =
CAS_DMA_WRITE(map->dm_segs[i].ds_addr);
flags = (map->dm_segs[i].ds_len & CAS_TD_BUFSIZE) |
(i == 0 ? CAS_TD_START_OF_PACKET : 0) |
((i == (map->dm_nsegs - 1)) ? CAS_TD_END_OF_PACKET : 0);
sc->sc_txdescs[frag].cd_flags = CAS_DMA_WRITE(flags);
bus_dmamap_sync(sc->sc_dmatag, sc->sc_cddmamap,
CAS_CDTXOFF(frag), sizeof(struct cas_desc),
BUS_DMASYNC_PREWRITE);
cur = frag;
if (++frag == CAS_NTXDESC)
frag = 0;
}
sc->sc_tx_cnt += map->dm_nsegs;
sc->sc_txd[*bixp].sd_map = sc->sc_txd[cur].sd_map;
sc->sc_txd[cur].sd_map = map;
sc->sc_txd[cur].sd_mbuf = mhead;
bus_space_write_4(sc->sc_memt, sc->sc_memh, CAS_TX_KICK, frag);
*bixp = frag;
/* sync descriptors */
return (0);
}
开发者ID:repos-holder,项目名称:openbsd-patches,代码行数:51,代码来源:if_cas.c
示例11: vdsk_dring_free
void
vdsk_dring_free(bus_dma_tag_t t, struct vdsk_dring *vd)
{
bus_size_t size;
size = vd->vd_nentries * sizeof(struct vd_desc);
size = roundup(size, PAGE_SIZE);
bus_dmamap_unload(t, vd->vd_map);
bus_dmamem_unmap(t, (caddr_t)vd->vd_desc, size);
bus_dmamem_free(t, &vd->vd_seg, 1);
bus_dmamap_destroy(t, vd->vd_map);
free(vd, M_DEVBUF);
}
开发者ID:enukane,项目名称:openbsd-work,代码行数:14,代码来源:vdsk.c
示例12: bce_rxdrain
/* Drain the receive queue. */
void
bce_rxdrain(struct bce_softc *sc)
{
int i;
for (i = 0; i < BCE_NRXDESC; i++) {
if (sc->bce_cdata.bce_rx_chain[i] != NULL) {
bus_dmamap_unload(sc->bce_dmatag,
sc->bce_cdata.bce_rx_map[i]);
m_freem(sc->bce_cdata.bce_rx_chain[i]);
sc->bce_cdata.bce_rx_chain[i] = NULL;
}
}
}
开发者ID:repos-holder,项目名称:openbsd-patches,代码行数:15,代码来源:if_bce.c
示例13: iee_detach
void
iee_detach(struct iee_softc *sc, int flags)
{
struct ifnet *ifp = &sc->sc_ethercom.ec_if;
if ((ifp->if_flags & IFF_RUNNING) != 0)
iee_stop(ifp, 1);
ether_ifdetach(ifp);
if_detach(ifp);
bus_dmamap_unload(sc->sc_dmat, sc->sc_shmem_map);
bus_dmamap_destroy(sc->sc_dmat, sc->sc_shmem_map);
bus_dmamem_unmap(sc->sc_dmat, sc->sc_shmem_addr, sc->sc_shmem_sz);
bus_dmamem_free(sc->sc_dmat, &sc->sc_dma_segs, sc->sc_dma_rsegs);
}
开发者ID:eyberg,项目名称:rumpkernel-netbsd-src,代码行数:14,代码来源:i82596.c
示例14: rtwn_free_rx_list
void
rtwn_free_rx_list(struct rtwn_pci_softc *sc)
{
struct rtwn_rx_ring *rx_ring = &sc->rx_ring;
struct rtwn_rx_data *rx_data;
int i, s;
s = splnet();
if (rx_ring->map) {
if (rx_ring->desc) {
bus_dmamap_unload(sc->sc_dmat, rx_ring->map);
bus_dmamem_unmap(sc->sc_dmat, (caddr_t)rx_ring->desc,
sizeof (struct r92c_rx_desc_pci) *
RTWN_RX_LIST_COUNT);
bus_dmamem_free(sc->sc_dmat, &rx_ring->seg,
rx_ring->nsegs);
rx_ring->desc = NULL;
}
bus_dmamap_destroy(sc->sc_dmat, rx_ring->map);
rx_ring->map = NULL;
}
for (i = 0; i < RTWN_RX_LIST_COUNT; i++) {
rx_data = &rx_ring->rx_data[i];
if (rx_data->m != NULL) {
bus_dmamap_unload(sc->sc_dmat, rx_data->map);
m_freem(rx_data->m);
rx_data->m = NULL;
}
bus_dmamap_destroy(sc->sc_dmat, rx_data->map);
rx_data->map = NULL;
}
splx(s);
}
开发者ID:mosconi,项目名称:openbsd,代码行数:37,代码来源:if_rtwn.c
示例15: tws_unmap_request
void
tws_unmap_request(struct tws_softc *sc, struct tws_request *req)
{
if (req->data != NULL) {
if ( req->flags & TWS_DIR_IN )
bus_dmamap_sync(sc->data_tag, req->dma_map,
BUS_DMASYNC_POSTREAD);
if ( req->flags & TWS_DIR_OUT )
bus_dmamap_sync(sc->data_tag, req->dma_map,
BUS_DMASYNC_POSTWRITE);
mtx_lock(&sc->io_lock);
bus_dmamap_unload(sc->data_tag, req->dma_map);
mtx_unlock(&sc->io_lock);
}
}
开发者ID:dcui,项目名称:FreeBSD-9.3_kernel,代码行数:15,代码来源:tws_cam.c
示例16: lsi64854_detach
int
lsi64854_detach(struct lsi64854_softc *sc)
{
if (sc->setup != NULL) {
bus_dmamap_sync(sc->sc_buffer_dmat, sc->sc_dmamap,
(L64854_GCSR(sc) & L64854_WRITE) != 0 ?
BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
bus_dmamap_unload(sc->sc_buffer_dmat, sc->sc_dmamap);
bus_dmamap_destroy(sc->sc_buffer_dmat, sc->sc_dmamap);
bus_dma_tag_destroy(sc->sc_buffer_dmat);
}
return (0);
}
开发者ID:coyizumi,项目名称:cs111,代码行数:15,代码来源:lsi64854.c
示例17: s3c2440_i2s_free
void
s3c2440_i2s_free(s3c2440_i2s_buf_t buf)
{
struct s3c2xx0_softc *sc = s3c2xx0_softc; /* Shortcut */
if (buf->i2b_xfer != NULL) {
s3c2440_dmac_free_xfer(buf->i2b_xfer);
}
bus_dmamap_unload(sc->sc_dmat, buf->i2b_dmamap);
bus_dmamap_destroy(sc->sc_dmat, buf->i2b_dmamap);
bus_dmamem_unmap(sc->sc_dmat, &buf->i2b_addr, buf->i2b_size);
bus_dmamem_free(sc->sc_dmat, buf->i2b_segs, buf->i2b_nsegs);
kmem_free(buf, sizeof(struct s3c2440_i2s_buf));
}
开发者ID:krytarowski,项目名称:netbsd-current-src-sys,代码行数:15,代码来源:s3c2440_i2s.c
示例18: hatm_free_tpd
/*
* Free a TPD. If the mbuf pointer in that TPD is not zero, it is assumed, that
* the DMA map of this TPD was used to load this mbuf. The map is unloaded
* and the mbuf is freed. The TPD is put back onto the free list and
* its used bit is cleared.
*/
static void
hatm_free_tpd(struct hatm_softc *sc, struct tpd *tpd)
{
if (tpd->mbuf != NULL) {
bus_dmamap_unload(sc->tx_tag, tpd->map);
hatm_free_txmbuf(sc);
m_freem(tpd->mbuf);
tpd->mbuf = NULL;
}
/* insert TPD into free list */
SLIST_INSERT_HEAD(&sc->tpd_free, tpd, link);
TPD_CLR_USED(sc, tpd->no);
sc->tpd_nfree++;
}
开发者ID:ChaosJohn,项目名称:freebsd,代码行数:21,代码来源:if_hatm_tx.c
示例19: ti_mmchs_intr_xfer_compl
/**
* ti_mmchs_intr_xfer_compl - called if a 'transfer complete' IRQ was received
* @sc: pointer to the driver context
* @cmd: the command that was sent previously
*
* This function is simply responsible for syncing up the DMA buffer.
*
* LOCKING:
* Called from interrupt context
*
* RETURNS:
* Return value indicates if the transaction is complete, not done = 0, done != 0
*/
static int
ti_mmchs_intr_xfer_compl(struct ti_mmchs_softc *sc, struct mmc_command *cmd)
{
uint32_t cmd_reg;
/* Read command register to test whether this command was a read or write. */
cmd_reg = ti_mmchs_read_4(sc, MMCHS_CMD);
/* Sync-up the DMA buffer so the caller can access the new memory */
if (cmd_reg & MMCHS_CMD_DDIR) {
bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_POSTREAD);
bus_dmamap_unload(sc->sc_dmatag, sc->sc_dmamap);
}
else {
bus_dmamap_sync(sc->sc_dmatag, sc->sc_dmamap, BUS_DMASYNC_POSTWRITE);
bus_dmamap_unload(sc->sc_dmatag, sc->sc_dmamap);
}
sc->sc_dmamapped--;
/* Debugging dump of the data received */
#if 0
{
int i;
uint8_t *p = (uint8_t*) sc->sc_cmd_data_vaddr;
for (i=0; i<sc->sc_cmd_data_len; i++) {
if ((i % 16) == 0)
printf("\n0x%04x : ", i);
printf("%02X ", *p++);
}
printf("\n");
}
#endif
/* We are done, transfer complete */
return 1;
}
开发者ID:Alkzndr,项目名称:freebsd,代码行数:49,代码来源:ti_mmchs.c
示例20: mly_free_command_cluster
/********************************************************************************
* Free a command cluster.
*/
static void
mly_free_command_cluster(struct mly_command_cluster *mcc)
{
struct mly_softc *sc = mcc->mcc_command[0].mc_sc;
int i;
debug_called(1);
for (i = 0; i < MLY_CMD_CLUSTERCOUNT; i++)
bus_dmamap_destroy(sc->mly_buffer_dmat, mcc->mcc_command[i].mc_datamap);
bus_dmamap_unload(sc->mly_packet_dmat, mcc->mcc_packetmap);
bus_dmamem_free(sc->mly_packet_dmat, mcc->mcc_packet, mcc->mcc_packetmap);
free(mcc, M_DEVBUF);
}
开发者ID:UnitedMarsupials,项目名称:kame,代码行数:18,代码来源:mly_pci.c
注:本文中的bus_dmamap_unload函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论