version 1.75.2.2, 2006/03/01 09:28:03 |
version 1.76, 2006/02/01 20:21:38 |
Line 77 int psycho_debug = 0x0; |
|
Line 77 int psycho_debug = 0x0; |
|
|
|
#include "ioconf.h" |
#include "ioconf.h" |
|
|
static pci_chipset_tag_t psycho_alloc_chipset(struct psycho_pbm *, int, |
static pci_chipset_tag_t psycho_alloc_chipset __P((struct psycho_pbm *, int, |
pci_chipset_tag_t); |
pci_chipset_tag_t)); |
static struct extent *psycho_alloc_extent(struct psycho_pbm *, int, int, |
static struct extent *psycho_alloc_extent __P((struct psycho_pbm *, int, int, |
const char *); |
const char *)); |
static void psycho_get_bus_range(int, int *); |
static void psycho_get_bus_range __P((int, int *)); |
static void psycho_get_ranges(int, struct psycho_ranges **, int *); |
static void psycho_get_ranges __P((int, struct psycho_ranges **, int *)); |
static void psycho_set_intr(struct psycho_softc *, int, void *, uint64_t *, |
static void psycho_set_intr __P((struct psycho_softc *, int, void *, |
uint64_t *); |
u_int64_t *, u_int64_t *)); |
|
|
/* Interrupt handlers */ |
/* Interrupt handlers */ |
static int psycho_ue(void *); |
static int psycho_ue __P((void *)); |
static int psycho_ce(void *); |
static int psycho_ce __P((void *)); |
static int psycho_bus_a(void *); |
static int psycho_bus_a __P((void *)); |
static int psycho_bus_b(void *); |
static int psycho_bus_b __P((void *)); |
static int psycho_powerfail(void *); |
static int psycho_powerfail __P((void *)); |
static int psycho_wakeup(void *); |
static int psycho_wakeup __P((void *)); |
|
|
|
|
/* IOMMU support */ |
/* IOMMU support */ |
static void psycho_iommu_init(struct psycho_softc *, int); |
static void psycho_iommu_init __P((struct psycho_softc *, int)); |
|
|
/* |
/* |
* bus space and bus DMA support for UltraSPARC `psycho'. note that most |
* bus space and bus DMA support for UltraSPARC `psycho'. note that most |
* of the bus DMA support is provided by the iommu dvma controller. |
* of the bus DMA support is provided by the iommu dvma controller. |
*/ |
*/ |
static int get_childspace(int); |
static int get_childspace __P((int)); |
static struct psycho_ranges *get_psychorange(struct psycho_pbm *, int); |
static struct psycho_ranges *get_psychorange __P((struct psycho_pbm *, int)); |
|
|
static paddr_t psycho_bus_mmap(bus_space_tag_t, bus_addr_t, off_t, int, int); |
static paddr_t psycho_bus_mmap __P((bus_space_tag_t, bus_addr_t, off_t, |
static int _psycho_bus_map(bus_space_tag_t, bus_addr_t, bus_size_t, int, |
int, int)); |
vaddr_t, bus_space_handle_t *); |
static int _psycho_bus_map __P((bus_space_tag_t, bus_addr_t, bus_size_t, int, |
static void *psycho_intr_establish(bus_space_tag_t, int, int, int (*)(void *), |
vaddr_t, bus_space_handle_t *)); |
void *, void(*)(void)); |
static void *psycho_intr_establish __P((bus_space_tag_t, int, int, |
|
int (*) __P((void *)), void *, void(*)__P((void)))); |
static int psycho_dmamap_load(bus_dma_tag_t, bus_dmamap_t, void *, bus_size_t, |
|
struct proc *, int); |
static int psycho_dmamap_load __P((bus_dma_tag_t, bus_dmamap_t, void *, |
static void psycho_dmamap_unload(bus_dma_tag_t, bus_dmamap_t); |
bus_size_t, struct proc *, int)); |
static int psycho_dmamap_load_raw(bus_dma_tag_t, bus_dmamap_t, |
static void psycho_dmamap_unload __P((bus_dma_tag_t, bus_dmamap_t)); |
bus_dma_segment_t *, int, bus_size_t, int); |
static int psycho_dmamap_load_raw __P((bus_dma_tag_t, bus_dmamap_t, |
static void psycho_dmamap_sync(bus_dma_tag_t, bus_dmamap_t, bus_addr_t, |
bus_dma_segment_t *, int, bus_size_t, int)); |
bus_size_t, int); |
static void psycho_dmamap_sync __P((bus_dma_tag_t, bus_dmamap_t, bus_addr_t, |
int psycho_dmamem_alloc(bus_dma_tag_t, bus_size_t, bus_size_t, bus_size_t, |
bus_size_t, int)); |
bus_dma_segment_t *, int, int *, int); |
int psycho_dmamem_alloc __P((bus_dma_tag_t, bus_size_t, bus_size_t, bus_size_t, |
void psycho_dmamem_free(bus_dma_tag_t, bus_dma_segment_t *, int); |
bus_dma_segment_t *, int, int *, int)); |
int psycho_dmamem_map(bus_dma_tag_t, bus_dma_segment_t *, int, size_t, |
void psycho_dmamem_free __P((bus_dma_tag_t, bus_dma_segment_t *, int)); |
caddr_t *, int); |
int psycho_dmamem_map __P((bus_dma_tag_t, bus_dma_segment_t *, int, size_t, |
void psycho_dmamem_unmap(bus_dma_tag_t, caddr_t, size_t); |
caddr_t *, int)); |
|
void psycho_dmamem_unmap __P((bus_dma_tag_t, caddr_t, size_t)); |
|
|
/* base pci_chipset */ |
/* base pci_chipset */ |
extern struct sparc_pci_chipset _sparc_pci_chipset; |
extern struct sparc_pci_chipset _sparc_pci_chipset; |
Line 135 static void psycho_power_button_pressed( |
|
Line 136 static void psycho_power_button_pressed( |
|
/* |
/* |
* autoconfiguration |
* autoconfiguration |
*/ |
*/ |
static int psycho_match(struct device *, struct cfdata *, void *); |
static int psycho_match __P((struct device *, struct cfdata *, void *)); |
static void psycho_attach(struct device *, struct device *, void *); |
static void psycho_attach __P((struct device *, struct device *, void *)); |
static int psycho_print(void *aux, const char *p); |
static int psycho_print __P((void *aux, const char *p)); |
|
|
CFATTACH_DECL(psycho, sizeof(struct psycho_softc), |
CFATTACH_DECL(psycho, sizeof(struct psycho_softc), |
psycho_match, psycho_attach, NULL, NULL); |
psycho_match, psycho_attach, NULL, NULL); |
Line 195 struct psycho_names { |
|
Line 196 struct psycho_names { |
|
}; |
}; |
|
|
static int |
static int |
psycho_match(struct device *parent, struct cfdata *match, void *aux) |
psycho_match(parent, match, aux) |
|
struct device *parent; |
|
struct cfdata *match; |
|
void *aux; |
{ |
{ |
struct mainbus_attach_args *ma = aux; |
struct mainbus_attach_args *ma = aux; |
char *model = prom_getpropstring(ma->ma_node, "model"); |
char *model = prom_getpropstring(ma->ma_node, "model"); |
Line 220 static void psycho_dump_intmap(struct ps |
|
Line 224 static void psycho_dump_intmap(struct ps |
|
static void |
static void |
psycho_dump_intmap(struct psycho_softc *sc) |
psycho_dump_intmap(struct psycho_softc *sc) |
{ |
{ |
volatile uint64_t *intrmapptr = NULL; |
volatile u_int64_t *intrmapptr = NULL; |
|
|
printf("psycho_dump_intmap: OBIO\n"); |
printf("psycho_dump_intmap: OBIO\n"); |
|
|
Line 259 psycho_dump_intmap(struct psycho_softc * |
|
Line 263 psycho_dump_intmap(struct psycho_softc * |
|
* just copy it's tags and addresses. |
* just copy it's tags and addresses. |
*/ |
*/ |
static void |
static void |
psycho_attach(struct device *parent, struct device *self, void *aux) |
psycho_attach(parent, self, aux) |
|
struct device *parent, *self; |
|
void *aux; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)self; |
struct psycho_softc *sc = (struct psycho_softc *)self; |
struct psycho_softc *osc = NULL; |
struct psycho_softc *osc = NULL; |
Line 267 psycho_attach(struct device *parent, str |
|
Line 273 psycho_attach(struct device *parent, str |
|
struct pcibus_attach_args pba; |
struct pcibus_attach_args pba; |
struct mainbus_attach_args *ma = aux; |
struct mainbus_attach_args *ma = aux; |
bus_space_handle_t bh; |
bus_space_handle_t bh; |
uint64_t csr; |
u_int64_t csr; |
int psycho_br[2], n, i; |
int psycho_br[2], n, i; |
bus_space_handle_t pci_ctl; |
bus_space_handle_t pci_ctl; |
char *model = prom_getpropstring(ma->ma_node, "model"); |
char *model = prom_getpropstring(ma->ma_node, "model"); |
|
|
&sc->sc_regs->power_clr_int); |
&sc->sc_regs->power_clr_int); |
psycho_register_power_button(sc); |
psycho_register_power_button(sc); |
if (sc->sc_mode != PSYCHO_MODE_SABRE) { |
if (sc->sc_mode != PSYCHO_MODE_SABRE) { |
/* sabre doesn't have these interrupts */ |
/* sabre doesn't have these interrups */ |
psycho_set_intr(sc, 15, psycho_bus_b, |
psycho_set_intr(sc, 15, psycho_bus_b, |
&sc->sc_regs->pciberr_int_map, |
&sc->sc_regs->pciberr_int_map, |
&sc->sc_regs->pciberr_clr_int); |
&sc->sc_regs->pciberr_clr_int); |
|
|
} |
} |
|
|
static int |
static int |
psycho_print(void *aux, const char *p) |
psycho_print(aux, p) |
|
void *aux; |
|
const char *p; |
{ |
{ |
|
|
if (p == NULL) |
if (p == NULL) |
Line 649 psycho_print(void *aux, const char *p) |
|
Line 657 psycho_print(void *aux, const char *p) |
|
} |
} |
|
|
static void |
static void |
psycho_set_intr(struct psycho_softc *sc, int ipl, void *handler, |
psycho_set_intr(sc, ipl, handler, mapper, clearer) |
uint64_t *mapper, uint64_t *clearer) |
struct psycho_softc *sc; |
|
int ipl; |
|
void *handler; |
|
u_int64_t *mapper; |
|
u_int64_t *clearer; |
{ |
{ |
struct intrhand *ih; |
struct intrhand *ih; |
|
|
Line 706 psycho_power_button_pressed(void *arg) |
|
Line 718 psycho_power_button_pressed(void *arg) |
|
* allocate a PCI chipset tag and set it's cookie. |
* allocate a PCI chipset tag and set it's cookie. |
*/ |
*/ |
static pci_chipset_tag_t |
static pci_chipset_tag_t |
psycho_alloc_chipset(struct psycho_pbm *pp, int node, pci_chipset_tag_t pc) |
psycho_alloc_chipset(pp, node, pc) |
|
struct psycho_pbm *pp; |
|
int node; |
|
pci_chipset_tag_t pc; |
{ |
{ |
pci_chipset_tag_t npc; |
pci_chipset_tag_t npc; |
|
|
Line 724 psycho_alloc_chipset(struct psycho_pbm * |
|
Line 739 psycho_alloc_chipset(struct psycho_pbm * |
|
* create extent for free bus space, then allocate assigned regions. |
* create extent for free bus space, then allocate assigned regions. |
*/ |
*/ |
static struct extent * |
static struct extent * |
psycho_alloc_extent(struct psycho_pbm *pp, int node, int ss, const char *name) |
psycho_alloc_extent(pp, node, ss, name) |
|
struct psycho_pbm *pp; |
|
int node; |
|
int ss; |
|
const char *name; |
{ |
{ |
struct psycho_registers *pa = NULL; |
struct psycho_registers *pa = NULL; |
struct psycho_ranges *pr; |
struct psycho_ranges *pr; |
|
|
* grovel the OBP for various psycho properties |
* grovel the OBP for various psycho properties |
*/ |
*/ |
static void |
static void |
psycho_get_bus_range(int node, int *brp) |
psycho_get_bus_range(node, brp) |
|
int node; |
|
int *brp; |
{ |
{ |
int n, error; |
int n, error; |
|
|
Line 814 psycho_get_bus_range(int node, int *brp) |
|
Line 835 psycho_get_bus_range(int node, int *brp) |
|
} |
} |
|
|
static void |
static void |
psycho_get_ranges(int node, struct psycho_ranges **rp, int *np) |
psycho_get_ranges(node, rp, np) |
|
int node; |
|
struct psycho_ranges **rp; |
|
int *np; |
{ |
{ |
|
|
if (prom_getprop(node, "ranges", sizeof(**rp), np, rp)) |
if (prom_getprop(node, "ranges", sizeof(**rp), np, rp)) |
Line 827 psycho_get_ranges(int node, struct psych |
|
Line 851 psycho_get_ranges(int node, struct psych |
|
*/ |
*/ |
|
|
static int |
static int |
psycho_ue(void *arg) |
psycho_ue(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psychoreg *regs = sc->sc_regs; |
struct psychoreg *regs = sc->sc_regs; |
Line 860 psycho_ue(void *arg) |
|
Line 885 psycho_ue(void *arg) |
|
return (1); |
return (1); |
} |
} |
static int |
static int |
psycho_ce(void *arg) |
psycho_ce(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psychoreg *regs = sc->sc_regs; |
struct psychoreg *regs = sc->sc_regs; |
Line 875 psycho_ce(void *arg) |
|
Line 901 psycho_ce(void *arg) |
|
return (1); |
return (1); |
} |
} |
static int |
static int |
psycho_bus_a(void *arg) |
psycho_bus_a(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psychoreg *regs = sc->sc_regs; |
struct psychoreg *regs = sc->sc_regs; |
Line 891 psycho_bus_a(void *arg) |
|
Line 918 psycho_bus_a(void *arg) |
|
return (1); |
return (1); |
} |
} |
static int |
static int |
psycho_bus_b(void *arg) |
psycho_bus_b(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psychoreg *regs = sc->sc_regs; |
struct psychoreg *regs = sc->sc_regs; |
Line 908 psycho_bus_b(void *arg) |
|
Line 936 psycho_bus_b(void *arg) |
|
} |
} |
|
|
static int |
static int |
psycho_powerfail(void *arg) |
psycho_powerfail(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
|
|
Line 924 psycho_powerfail(void *arg) |
|
Line 953 psycho_powerfail(void *arg) |
|
} |
} |
|
|
static |
static |
int psycho_wakeup(void *arg) |
int psycho_wakeup(arg) |
|
void *arg; |
{ |
{ |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
struct psycho_softc *sc = (struct psycho_softc *)arg; |
|
|
Line 942 int psycho_wakeup(void *arg) |
|
Line 972 int psycho_wakeup(void *arg) |
|
* initialise the IOMMU.. |
* initialise the IOMMU.. |
*/ |
*/ |
void |
void |
psycho_iommu_init(struct psycho_softc *sc, int tsbsize) |
psycho_iommu_init(sc, tsbsize) |
|
struct psycho_softc *sc; |
|
int tsbsize; |
{ |
{ |
char *name; |
char *name; |
struct iommu_state *is = sc->sc_is; |
struct iommu_state *is = sc->sc_is; |
uint32_t iobase = -1; |
u_int32_t iobase = -1; |
int *vdma = NULL; |
int *vdma = NULL; |
int nitem; |
int nitem; |
|
|
Line 994 psycho_iommu_init(struct psycho_softc *s |
|
Line 1026 psycho_iommu_init(struct psycho_softc *s |
|
* below here is bus space and bus DMA support |
* below here is bus space and bus DMA support |
*/ |
*/ |
bus_space_tag_t |
bus_space_tag_t |
psycho_alloc_bus_tag(struct psycho_pbm *pp, int type) |
psycho_alloc_bus_tag(pp, type) |
|
struct psycho_pbm *pp; |
|
int type; |
{ |
{ |
struct psycho_softc *sc = pp->pp_sc; |
struct psycho_softc *sc = pp->pp_sc; |
bus_space_tag_t bt; |
bus_space_tag_t bt; |
Line 1015 psycho_alloc_bus_tag(struct psycho_pbm * |
|
Line 1049 psycho_alloc_bus_tag(struct psycho_pbm * |
|
} |
} |
|
|
bus_dma_tag_t |
bus_dma_tag_t |
psycho_alloc_dma_tag(struct psycho_pbm *pp) |
psycho_alloc_dma_tag(pp) |
|
struct psycho_pbm *pp; |
{ |
{ |
struct psycho_softc *sc = pp->pp_sc; |
struct psycho_softc *sc = pp->pp_sc; |
bus_dma_tag_t dt, pdt = sc->sc_dmatag; |
bus_dma_tag_t dt, pdt = sc->sc_dmatag; |
Line 1052 psycho_alloc_dma_tag(struct psycho_pbm * |
|
Line 1087 psycho_alloc_dma_tag(struct psycho_pbm * |
|
*/ |
*/ |
|
|
static int |
static int |
get_childspace(int type) |
get_childspace(type) |
|
int type; |
{ |
{ |
int ss; |
int ss; |
|
|
Line 1080 get_childspace(int type) |
|
Line 1116 get_childspace(int type) |
|
} |
} |
|
|
static struct psycho_ranges * |
static struct psycho_ranges * |
get_psychorange(struct psycho_pbm *pp, int ss) |
get_psychorange(pp, ss) |
|
struct psycho_pbm *pp; |
|
int ss; |
{ |
{ |
int i; |
int i; |
|
|
Line 1093 get_psychorange(struct psycho_pbm *pp, i |
|
Line 1131 get_psychorange(struct psycho_pbm *pp, i |
|
} |
} |
|
|
static int |
static int |
_psycho_bus_map(bus_space_tag_t t, bus_addr_t offset, bus_size_t size, |
_psycho_bus_map(t, offset, size, flags, unused, hp) |
int flags, vaddr_t unused, bus_space_handle_t *hp) |
bus_space_tag_t t; |
|
bus_addr_t offset; |
|
bus_size_t size; |
|
int flags; |
|
vaddr_t unused; |
|
bus_space_handle_t *hp; |
{ |
{ |
struct psycho_pbm *pp = t->cookie; |
struct psycho_pbm *pp = t->cookie; |
struct psycho_softc *sc = pp->pp_sc; |
struct psycho_softc *sc = pp->pp_sc; |
Line 1125 _psycho_bus_map(bus_space_tag_t t, bus_a |
|
Line 1168 _psycho_bus_map(bus_space_tag_t t, bus_a |
|
} |
} |
|
|
static paddr_t |
static paddr_t |
psycho_bus_mmap(bus_space_tag_t t, bus_addr_t paddr, off_t off, int prot, |
psycho_bus_mmap(t, paddr, off, prot, flags) |
int flags) |
bus_space_tag_t t; |
|
bus_addr_t paddr; |
|
off_t off; |
|
int prot; |
|
int flags; |
{ |
{ |
bus_addr_t offset = paddr; |
bus_addr_t offset = paddr; |
struct psycho_pbm *pp = t->cookie; |
struct psycho_pbm *pp = t->cookie; |
Line 1157 psycho_bus_mmap(bus_space_tag_t t, bus_a |
|
Line 1204 psycho_bus_mmap(bus_space_tag_t t, bus_a |
|
* Get a PCI offset address from bus_space_handle_t. |
* Get a PCI offset address from bus_space_handle_t. |
*/ |
*/ |
bus_addr_t |
bus_addr_t |
psycho_bus_offset(bus_space_tag_t t, bus_space_handle_t *hp) |
psycho_bus_offset(t, hp) |
|
bus_space_tag_t t; |
|
bus_space_handle_t *hp; |
{ |
{ |
struct psycho_pbm *pp = t->cookie; |
struct psycho_pbm *pp = t->cookie; |
struct psycho_ranges *pr; |
struct psycho_ranges *pr; |
Line 1195 psycho_bus_offset(bus_space_tag_t t, bus |
|
Line 1244 psycho_bus_offset(bus_space_tag_t t, bus |
|
* install an interrupt handler for a PCI device |
* install an interrupt handler for a PCI device |
*/ |
*/ |
void * |
void * |
psycho_intr_establish(bus_space_tag_t t, int ihandle, int level, |
psycho_intr_establish(t, ihandle, level, handler, arg, fastvec) |
int (*handler)(void *), void *arg, void (*fastvec)(void) /* ignored */) |
bus_space_tag_t t; |
|
int ihandle; |
|
int level; |
|
int (*handler) __P((void *)); |
|
void *arg; |
|
void (*fastvec) __P((void)); /* ignored */ |
{ |
{ |
struct psycho_pbm *pp = t->cookie; |
struct psycho_pbm *pp = t->cookie; |
struct psycho_softc *sc = pp->pp_sc; |
struct psycho_softc *sc = pp->pp_sc; |
struct intrhand *ih; |
struct intrhand *ih; |
volatile uint64_t *intrmapptr = NULL, *intrclrptr = NULL; |
volatile u_int64_t *intrmapptr = NULL, *intrclrptr = NULL; |
int64_t imap = 0; |
int64_t imap = 0; |
int ino; |
int ino; |
long vec = INTVEC(ihandle); |
long vec = INTVEC(ihandle); |
|
|
* hooks into the iommu dvma calls. |
* hooks into the iommu dvma calls. |
*/ |
*/ |
int |
int |
psycho_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf, |
psycho_dmamap_load(t, map, buf, buflen, p, flags) |
bus_size_t buflen, struct proc *p, int flags) |
bus_dma_tag_t t; |
|
bus_dmamap_t map; |
|
void *buf; |
|
bus_size_t buflen; |
|
struct proc *p; |
|
int flags; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1325 psycho_dmamap_load(bus_dma_tag_t t, bus_ |
|
Line 1384 psycho_dmamap_load(bus_dma_tag_t t, bus_ |
|
} |
} |
|
|
void |
void |
psycho_dmamap_unload(bus_dma_tag_t t, bus_dmamap_t map) |
psycho_dmamap_unload(t, map) |
|
bus_dma_tag_t t; |
|
bus_dmamap_t map; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1333 psycho_dmamap_unload(bus_dma_tag_t t, bu |
|
Line 1394 psycho_dmamap_unload(bus_dma_tag_t t, bu |
|
} |
} |
|
|
int |
int |
psycho_dmamap_load_raw(bus_dma_tag_t t, bus_dmamap_t map, |
psycho_dmamap_load_raw(t, map, segs, nsegs, size, flags) |
bus_dma_segment_t *segs, int nsegs, bus_size_t size, int flags) |
bus_dma_tag_t t; |
|
bus_dmamap_t map; |
|
bus_dma_segment_t *segs; |
|
int nsegs; |
|
bus_size_t size; |
|
int flags; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1342 psycho_dmamap_load_raw(bus_dma_tag_t t, |
|
Line 1408 psycho_dmamap_load_raw(bus_dma_tag_t t, |
|
} |
} |
|
|
void |
void |
psycho_dmamap_sync(bus_dma_tag_t t, bus_dmamap_t map, bus_addr_t offset, |
psycho_dmamap_sync(t, map, offset, len, ops) |
bus_size_t len, int ops) |
bus_dma_tag_t t; |
|
bus_dmamap_t map; |
|
bus_addr_t offset; |
|
bus_size_t len; |
|
int ops; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1361 psycho_dmamap_sync(bus_dma_tag_t t, bus_ |
|
Line 1431 psycho_dmamap_sync(bus_dma_tag_t t, bus_ |
|
} |
} |
|
|
int |
int |
psycho_dmamem_alloc(bus_dma_tag_t t, bus_size_t size, bus_size_t alignment, |
psycho_dmamem_alloc(t, size, alignment, boundary, segs, nsegs, rsegs, flags) |
bus_size_t boundary, bus_dma_segment_t *segs, int nsegs, int *rsegs, |
bus_dma_tag_t t; |
int flags) |
bus_size_t size; |
|
bus_size_t alignment; |
|
bus_size_t boundary; |
|
bus_dma_segment_t *segs; |
|
int nsegs; |
|
int *rsegs; |
|
int flags; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1372 psycho_dmamem_alloc(bus_dma_tag_t t, bus |
|
Line 1448 psycho_dmamem_alloc(bus_dma_tag_t t, bus |
|
} |
} |
|
|
void |
void |
psycho_dmamem_free(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs) |
psycho_dmamem_free(t, segs, nsegs) |
|
bus_dma_tag_t t; |
|
bus_dma_segment_t *segs; |
|
int nsegs; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1380 psycho_dmamem_free(bus_dma_tag_t t, bus_ |
|
Line 1459 psycho_dmamem_free(bus_dma_tag_t t, bus_ |
|
} |
} |
|
|
int |
int |
psycho_dmamem_map(bus_dma_tag_t t, bus_dma_segment_t *segs, int nsegs, |
psycho_dmamem_map(t, segs, nsegs, size, kvap, flags) |
size_t size, caddr_t *kvap, int flags) |
bus_dma_tag_t t; |
|
bus_dma_segment_t *segs; |
|
int nsegs; |
|
size_t size; |
|
caddr_t *kvap; |
|
int flags; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|
Line 1389 psycho_dmamem_map(bus_dma_tag_t t, bus_d |
|
Line 1473 psycho_dmamem_map(bus_dma_tag_t t, bus_d |
|
} |
} |
|
|
void |
void |
psycho_dmamem_unmap(bus_dma_tag_t t, caddr_t kva, size_t size) |
psycho_dmamem_unmap(t, kva, size) |
|
bus_dma_tag_t t; |
|
caddr_t kva; |
|
size_t size; |
{ |
{ |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
struct psycho_pbm *pp = (struct psycho_pbm *)t->_cookie; |
|
|