本文整理汇总了C++中DELAY函数的典型用法代码示例。如果您正苦于以下问题:C++ DELAY函数的具体用法?C++ DELAY怎么用?C++ DELAY使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DELAY函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: tlphy_service
static int
tlphy_service(struct mii_softc *self, struct mii_data *mii, int cmd)
{
struct tlphy_softc *sc = (struct tlphy_softc *)self;
struct ifmedia_entry *ife = mii->mii_media.ifm_cur;
int reg;
if (sc->sc_need_acomp)
tlphy_acomp(sc);
switch (cmd) {
case MII_POLLSTAT:
/*
* If we're not polling our PHY instance, just return.
*/
if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst)
return (0);
break;
case MII_MEDIACHG:
/*
* If the media indicates a different PHY instance,
* isolate ourselves.
*/
if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst) {
reg = PHY_READ(&sc->sc_mii, MII_BMCR);
PHY_WRITE(&sc->sc_mii, MII_BMCR, reg | BMCR_ISO);
return (0);
}
/*
* If the interface is not up, don't do anything.
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
break;
switch (IFM_SUBTYPE(ife->ifm_media)) {
case IFM_AUTO:
/*
* The ThunderLAN PHY doesn't self-configure after
* an autonegotiation cycle, so there's no such
* thing as "already in auto mode".
*/
tlphy_auto(sc, 1);
break;
case IFM_10_2:
case IFM_10_5:
PHY_WRITE(&sc->sc_mii, MII_BMCR, 0);
PHY_WRITE(&sc->sc_mii, MII_TLPHY_CTRL, CTRL_AUISEL);
DELAY(100000);
break;
default:
PHY_WRITE(&sc->sc_mii, MII_TLPHY_CTRL, 0);
DELAY(100000);
mii_phy_set_media(&sc->sc_mii);
break;
}
break;
case MII_TICK:
/*
* If we're not currently selected, just return.
*/
if (IFM_INST(ife->ifm_media) != sc->sc_mii.mii_inst)
return (0);
/*
* Is the interface even up?
*/
if ((mii->mii_ifp->if_flags & IFF_UP) == 0)
return (0);
/*
* Only used for autonegotiation.
*/
if (IFM_SUBTYPE(ife->ifm_media) != IFM_AUTO)
break;
/*
* Check to see if we have link. If we do, we don't
* need to restart the autonegotiation process. Read
* the BMSR twice in case it's latched.
*
* XXX WHAT ABOUT CHECKING LINK ON THE BNC/AUI?!
*/
reg = PHY_READ(&sc->sc_mii, MII_BMSR) |
PHY_READ(&sc->sc_mii, MII_BMSR);
if (reg & BMSR_LINK) {
sc->sc_mii.mii_ticks = 0;
break;
}
/*
* Only retry autonegotiation every mii_anegticks seconds.
*/
if (++sc->sc_mii.mii_ticks <= sc->sc_mii.mii_anegticks)
return (0);
sc->sc_mii.mii_ticks = 0;
mii_phy_reset(&sc->sc_mii);
//.........这里部分代码省略.........
示例2: platform_mp_start_ap
void
platform_mp_start_ap(void)
{
uint32_t reg, *src, *dst, cpu_num, div_val, cputype;
vm_offset_t pmu_boot_off;
/*
* Initialization procedure depends on core revision,
* in this step CHIP ID is checked to choose proper procedure
*/
cputype = cpu_ident();
cputype &= CPU_ID_CPU_MASK;
/*
* Set the PA of CPU0 Boot Address Redirect register used in
* mptramp according to the actual SoC registers' base address.
*/
pmu_boot_off = (CPU_PMU(0) - MV_BASE) + CPU_PMU_BOOT;
mptramp_pmu_boot = fdt_immr_pa + pmu_boot_off;
dst = pmap_mapdev(0xffff0000, PAGE_SIZE);
for (src = (uint32_t *)mptramp; src < (uint32_t *)mptramp_end;
src++, dst++) {
*dst = *src;
}
pmap_unmapdev((vm_offset_t)dst, PAGE_SIZE);
if (cputype == CPU_ID_MV88SV584X_V7) {
/* Core rev A0 */
div_val = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1);
div_val &= 0x3f;
for (cpu_num = 1; cpu_num < mp_ncpus; cpu_num++ ) {
reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1);
reg &= CPU_DIVCLK_MASK(cpu_num);
reg |= div_val << (cpu_num * 8);
write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
}
} else {
/* Core rev Z1 */
div_val = 0x01;
if (mp_ncpus > 1) {
reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0);
reg &= CPU_DIVCLK_MASK(3);
reg |= div_val << 24;
write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL0, reg);
}
for (cpu_num = 2; cpu_num < mp_ncpus; cpu_num++ ) {
reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1);
reg &= CPU_DIVCLK_MASK(cpu_num);
reg |= div_val << (cpu_num * 8);
write_cpu_clkdiv(CPU_DIVCLK_CTRL2_RATIO_FULL1, reg);
}
}
reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0);
reg |= ((0x1 << (mp_ncpus - 1)) - 1) << 21;
write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
reg = read_cpu_clkdiv(CPU_DIVCLK_CTRL0);
reg |= 0x01000000;
write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
DELAY(100);
reg &= ~(0xf << 21);
write_cpu_clkdiv(CPU_DIVCLK_CTRL0, reg);
DELAY(100);
bus_space_write_4(fdtbus_bs_tag, MV_BASE, CPU_RESUME_CONTROL, 0);
for (cpu_num = 1; cpu_num < mp_ncpus; cpu_num++ )
bus_space_write_4(fdtbus_bs_tag, CPU_PMU(cpu_num), CPU_PMU_BOOT,
pmap_kextract((vm_offset_t)mpentry));
dcache_wbinv_poc_all();
for (cpu_num = 1; cpu_num < mp_ncpus; cpu_num++ )
bus_space_write_4(fdtbus_bs_tag, MP, MP_SW_RESET(cpu_num), 0);
/* XXX: Temporary workaround for hangup after releasing AP's */
wmb();
DELAY(10);
armadaxp_init_coher_fabric();
}
示例3: cs4281_wr
static inline void
cs4281_wr(struct sc_info *sc, int regno, u_int32_t data)
{
bus_space_write_4(sc->st, sc->sh, regno, data);
DELAY(100);
}
示例4: I810WaitLpRing
int
I810WaitLpRing(ScrnInfoPtr pScrn, int n, int timeout_millis)
{
I810Ptr pI810 = I810PTR(pScrn);
I810RingBuffer *ring = &(pI810->LpRing);
int iters = 0;
int start = 0;
int now = 0;
int last_head = 0;
int first = 0;
/* If your system hasn't moved the head pointer in 2 seconds, I'm going to
* call it crashed.
*/
if (timeout_millis == 0)
timeout_millis = 2000;
if (I810_DEBUG & DEBUG_VERBOSE_ACCEL) {
ErrorF("I810WaitLpRing %d\n", n);
first = GetTimeInMillis();
}
while (ring->space < n) {
ring->head = INREG(LP_RING + RING_HEAD) & HEAD_ADDR;
ring->space = ring->head - (ring->tail + 8);
if (ring->space < 0)
ring->space += ring->mem.Size;
iters++;
now = GetTimeInMillis();
if (start == 0 || now < start || ring->head != last_head) {
if (I810_DEBUG & DEBUG_VERBOSE_ACCEL)
if (now > start)
ErrorF("space: %d wanted %d\n", ring->space, n);
start = now;
last_head = ring->head;
} else if (now - start > timeout_millis) {
ErrorF("Error in I810WaitLpRing(), now is %d, start is %d\n", now,
start);
I810PrintErrorState(pScrn);
ErrorF("space: %d wanted %d\n", ring->space, n);
#ifdef XF86DRI
if (pI810->directRenderingEnabled) {
DRIUnlock(screenInfo.screens[pScrn->scrnIndex]);
DRICloseScreen(screenInfo.screens[pScrn->scrnIndex]);
}
#endif
pI810->AccelInfoRec = NULL; /* Stops recursive behavior */
FatalError("lockup\n");
}
DELAY(10000);
}
if (I810_DEBUG & DEBUG_VERBOSE_ACCEL) {
now = GetTimeInMillis();
if (now - first) {
ErrorF("Elapsed %d ms\n", now - first);
ErrorF("space: %d wanted %d\n", ring->space, n);
}
}
return iters;
}
示例5: mc_attach
void
mc_attach(struct device *parent, struct device *self, void *aux)
{
struct confargs *ca = aux;
struct mc_softc *sc = (struct mc_softc *)self;
struct ifnet *ifp = &sc->sc_arpcom.ac_if;
u_int8_t lladdr[ETHER_ADDR_LEN];
int nseg, error;
if (OF_getprop(ca->ca_node, "local-mac-address", lladdr,
ETHER_ADDR_LEN) != ETHER_ADDR_LEN) {
printf(": failed to get MAC address.\n");
return;
}
ca->ca_reg[0] += ca->ca_baseaddr;
ca->ca_reg[2] += ca->ca_baseaddr;
ca->ca_reg[4] += ca->ca_baseaddr;
if ((sc->sc_reg = mapiodev(ca->ca_reg[0], ca->ca_reg[1])) == NULL) {
printf(": cannot map registers\n");
return;
}
sc->sc_dmat = ca->ca_dmat;
sc->sc_tail = 0;
if ((sc->sc_txdma = mapiodev(ca->ca_reg[2], ca->ca_reg[3])) == NULL) {
printf(": cannot map TX DMA registers\n");
goto notxdma;
}
if ((sc->sc_rxdma = mapiodev(ca->ca_reg[4], ca->ca_reg[5])) == NULL) {
printf(": cannot map RX DMA registers\n");
goto norxdma;
}
if ((sc->sc_txdbdma = dbdma_alloc(sc->sc_dmat, 2)) == NULL) {
printf(": cannot alloc TX DMA descriptors\n");
goto notxdbdma;
}
sc->sc_txdmacmd = sc->sc_txdbdma->d_addr;
if ((sc->sc_rxdbdma = dbdma_alloc(sc->sc_dmat, 8 + 1)) == NULL) {
printf(": cannot alloc RX DMA descriptors\n");
goto norxdbdma;
}
sc->sc_rxdmacmd = sc->sc_rxdbdma->d_addr;
if ((error = bus_dmamem_alloc(sc->sc_dmat, MACE_BUFSZ, PAGE_SIZE, 0,
sc->sc_bufseg, 1, &nseg, BUS_DMA_NOWAIT))) {
printf(": cannot allocate DMA mem (%d)\n", error);
goto nodmamem;
}
if ((error = bus_dmamem_map(sc->sc_dmat, sc->sc_bufseg, nseg,
MACE_BUFSZ, &sc->sc_txbuf, BUS_DMA_NOWAIT))) {
printf(": cannot map DMA mem (%d)\n", error);
goto nodmamap;
}
if ((error = bus_dmamap_create(sc->sc_dmat, MACE_BUFSZ, 1, MACE_BUFSZ,
0, BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &sc->sc_bufmap))) {
printf(": cannot create DMA map (%d)\n", error);
goto nodmacreate;
}
if ((error = bus_dmamap_load(sc->sc_dmat, sc->sc_bufmap, sc->sc_txbuf,
MACE_BUFSZ, NULL, BUS_DMA_NOWAIT))) {
printf(": cannot load DMA map (%d)\n", error);
goto nodmaload;
}
sc->sc_txbuf_pa = sc->sc_bufmap->dm_segs->ds_addr;
sc->sc_rxbuf = sc->sc_txbuf + MACE_BUFLEN * MACE_TXBUFS;
sc->sc_rxbuf_pa = sc->sc_txbuf_pa + MACE_BUFLEN * MACE_TXBUFS;
printf(": irq %d,%d,%d", ca->ca_intr[0], ca->ca_intr[1],
ca->ca_intr[2]);
/* disable receive DMA */
dbdma_reset(sc->sc_rxdma);
/* disable transmit DMA */
dbdma_reset(sc->sc_txdma);
/* install interrupt handlers */
mac_intr_establish(parent, ca->ca_intr[2], IST_LEVEL, IPL_NET,
mc_dmaintr, sc, sc->sc_dev.dv_xname);
mac_intr_establish(parent, ca->ca_intr[0], IST_LEVEL, IPL_NET,
mc_intr, sc, sc->sc_dev.dv_xname);
sc->sc_biucc = XMTSP_64;
sc->sc_fifocc = XMTFW_16 | RCVFW_64 | XMTFWU | RCVFWU |
XMTBRST | RCVBRST;
sc->sc_plscc = PORTSEL_GPSI | ENPLSIO;
/* reset the chip and disable all interrupts */
NIC_PUT(sc, MACE_BIUCC, SWRST);
DELAY(100);
NIC_PUT(sc, MACE_IMR, ~0);
//.........这里部分代码省略.........
示例6: bhnd_pwrctl_setclk
/**
* Distribute @p clock on backplane.
*
* @param sc Driver instance state.
* @param clock Clock to enable.
*
* @retval 0 success
* @retval ENODEV If @p clock is unsupported, or if the device does not
* support dynamic clock control.
*/
int
bhnd_pwrctl_setclk(struct bhnd_pwrctl_softc *sc, bhnd_clock clock)
{
uint32_t scc;
PWRCTL_LOCK_ASSERT(sc, MA_OWNED);
/* Is dynamic clock control supported? */
if (PWRCTL_QUIRK(sc, FIXED_CLK))
return (ENODEV);
/* Chips with ccrev 10 are EOL and they don't have SYCC_HR used below */
if (bhnd_get_hwrev(sc->chipc_dev) == 10)
return (ENODEV);
scc = bhnd_bus_read_4(sc->res, CHIPC_PLL_SLOWCLK_CTL);
switch (clock) {
case BHND_CLOCK_HT:
/* fast (pll) clock */
if (PWRCTL_QUIRK(sc, SLOWCLK_CTL)) {
scc &= ~(CHIPC_SCC_XC | CHIPC_SCC_FS | CHIPC_SCC_IP);
scc |= CHIPC_SCC_IP;
/* force xtal back on before clearing SCC_DYN_XTAL.. */
bhnd_pwrctl_ungate_clock(sc->chipc_dev, BHND_CLOCK_HT);
} else if (PWRCTL_QUIRK(sc, INSTACLK_CTL)) {
scc |= CHIPC_SYCC_HR;
} else {
return (ENODEV);
}
bhnd_bus_write_4(sc->res, CHIPC_PLL_SLOWCLK_CTL, scc);
DELAY(CHIPC_PLL_DELAY);
break;
case BHND_CLOCK_DYN:
/* enable dynamic clock control */
if (PWRCTL_QUIRK(sc, SLOWCLK_CTL)) {
scc &= ~(CHIPC_SCC_FS | CHIPC_SCC_IP | CHIPC_SCC_XC);
if ((scc & CHIPC_SCC_SS_MASK) != CHIPC_SCC_SS_XTAL)
scc |= CHIPC_SCC_XC;
bhnd_bus_write_4(sc->res, CHIPC_PLL_SLOWCLK_CTL, scc);
/* for dynamic control, we have to release our xtal_pu
* "force on" */
if (scc & CHIPC_SCC_XC) {
bhnd_pwrctl_gate_clock(sc->chipc_dev,
BHND_CLOCK_HT);
}
} else if (PWRCTL_QUIRK(sc, INSTACLK_CTL)) {
/* Instaclock */
scc &= ~CHIPC_SYCC_HR;
bhnd_bus_write_4(sc->res, CHIPC_SYS_CLK_CTL, scc);
} else {
return (ENODEV);
}
break;
default:
return (ENODEV);
}
return (0);
}
示例7: imx_ata_ch_attach
static int
imx_ata_ch_attach(device_t dev)
{
struct ata_pci_controller *ctrl;
struct ata_channel *ch;
int i;
ctrl = device_get_softc(device_get_parent(dev));
ch = device_get_softc(dev);
for (i = ATA_DATA; i < ATA_MAX_RES; i++)
ch->r_io[i].res = ctrl->r_res1;
bus_write_2(ctrl->r_res1, 0x24, 0x80);
DELAY(100);
bus_write_2(ctrl->r_res1, 0x24, 0xc0);
DELAY(100);
/* Write TIME_OFF/ON/1/2W */
bus_write_1(ctrl->r_res1, 0x00, 3);
bus_write_1(ctrl->r_res1, 0x01, 3);
bus_write_1(ctrl->r_res1, 0x02, (25 + 15) / 15);
bus_write_1(ctrl->r_res1, 0x03, (70 + 15) / 15);
/* Write TIME_2R/AX/RDX/4 */
bus_write_1(ctrl->r_res1, 0x04, (70 + 15) / 15);
bus_write_1(ctrl->r_res1, 0x05, (50 + 15) / 15 + 2);
bus_write_1(ctrl->r_res1, 0x06, 1);
bus_write_1(ctrl->r_res1, 0x07, (10 + 15) / 15);
/* Write TIME_9 ; the rest of timing registers is irrelevant for PIO */
bus_write_1(ctrl->r_res1, 0x08, (10 + 15) / 15);
bus_write_2(ctrl->r_res1, 0x24, 0xc1);
DELAY(30000);
/* setup ATA registers */
ch->r_io[ATA_DATA ].offset = 0xa0;
ch->r_io[ATA_FEATURE].offset = 0xa4;
ch->r_io[ATA_ERROR ].offset = 0xa4;
ch->r_io[ATA_COUNT ].offset = 0xa8;
ch->r_io[ATA_SECTOR ].offset = 0xac;
ch->r_io[ATA_CYL_LSB].offset = 0xb0;
ch->r_io[ATA_CYL_MSB].offset = 0xb4;
ch->r_io[ATA_DRIVE ].offset = 0xb8;
ch->r_io[ATA_COMMAND].offset = 0xbc;
ch->r_io[ATA_STATUS ].offset = 0xbc;
ch->r_io[ATA_ALTSTAT].offset = 0xd8;
ch->r_io[ATA_CONTROL].offset = 0xd8;
ata_pci_hw(dev);
ch->flags |= ATA_NO_SLAVE;
ch->flags |= ATA_USE_16BIT;
ch->flags |= ATA_CHECKS_CABLE;
ch->flags |= ATA_KNOWN_PRESENCE;
/* Clear pending interrupts. */
bus_write_2(ctrl->r_res1, 0x28, 0xf8);
/* Enable all, but Idle interrupts. */
bus_write_2(ctrl->r_res1, 0x2c, 0x88);
return 0;
}
示例8: ehci_arbus_attach
void
ehci_arbus_attach(device_t parent, device_t self, void *aux)
{
ehci_softc_t *sc = device_private(self);
struct arbus_attach_args * const aa = aux;
void *ih = NULL;
int error;
sc->iot = aa->aa_bst_le;
sc->sc_size = aa->aa_size;
//sc->sc_bus.ub_hcpriv = sc;
sc->sc_bus.ub_dmatag = aa->aa_dmat;
sc->sc_bus.ub_revision = USBREV_1_0;
sc->sc_flags |= EHCIF_ETTF;
sc->sc_vendor_init = ehci_arbus_init;
error = bus_space_map(aa->aa_bst, aa->aa_addr, aa->aa_size, 0,
&sc->ioh);
if (error) {
aprint_error(": failed to map registers: %d\n", error);
return;
}
/* The recommended value is 0x20 for both ports and the host */
REGVAL(AR9344_USB_CONFIG_BASE) = 0x20c00; /* magic */
DELAY(1000);
/* get offset to operational regs */
uint32_t r = bus_space_read_4(aa->aa_bst, sc->ioh, 0);
if (r != 0x40) {
aprint_error(": error: CAPLENGTH (%#x) != 0x40\n", sc->sc_offs);
return;
}
sc->sc_offs = EREAD1(sc, EHCI_CAPLENGTH);
aprint_normal("\n");
/* Disable EHCI interrupts */
EOWRITE4(sc, EHCI_USBINTR, 0);
/* establish interrupt */
ih = arbus_intr_establish(aa->aa_cirq, aa->aa_mirq, ehci_intr, sc);
if (ih == NULL)
panic("%s: couldn't establish interrupt",
device_xname(self));
/*
* There are no companion controllers
*/
sc->sc_ncomp = 0;
error = ehci_init(sc);
if (error) {
aprint_error("%s: init failed, error=%d\n", device_xname(self),
error);
if (ih != NULL)
arbus_intr_disestablish(ih);
return;
}
/* Attach USB device */
sc->sc_child = config_found(self, &sc->sc_bus, usbctlprint);
}
示例9: lk201_init
int
lk201_init(struct lk201_state *lks)
{
int i;
lks->waitack = 0;
send(lks, LK_LED_ENABLE);
send(lks, LK_LED_ALL);
/*
* set all keys to updown mode; autorepeat is
* done by wskbd software
*/
for (i = 1; i <= 14; i++)
send(lks, LK_CMD_MODE(LK_UPDOWN, i));
send(lks, LK_CL_ENABLE);
send(lks, LK_PARAM_VOLUME(3));
lks->kcvol = (8 - 3) * 100 / 8;
lks->bellvol = -1; /* not yet set */
for (i = 0; i < LK_KLL; i++)
lks->down_keys_list[i] = -1;
send(lks, LK_KBD_ENABLE);
send(lks, LK_LED_DISABLE);
send(lks, LK_LED_ALL);
lks->leds_state = 0;
/*
* Swallow all the keyboard acknowledges from lk201_init().
* There should be 14 of them - one per LK_CMD_MODE command.
*/
for(;;) {
lks->waitack = 1;
for (i = 100; i != 0; i--) {
DELAY(1000);
if (lks->waitack == 0)
break;
}
if (i == 0)
break;
}
/*
* Try to set the keyboard in LK-401 mode.
* If we receive an error, this is an LK-201 keyboard.
*/
lks->waitack = 1;
send(lks, LK_ENABLE_401);
for (i = 100; i != 0; i--) {
DELAY(1000);
if (lks->waitack == 0)
break;
}
if (lks->waitack != 0)
lks->kbdtype = KBD_NONE;
else {
if (lks->ackdata == LK_INPUT_ERROR)
lks->kbdtype = KBD_LK201;
else
lks->kbdtype = KBD_LK401;
}
lks->waitack = 0;
printf("lkkbd0: %s\n", lkkbd_descr[lks->kbdtype]);
return 0;
}
示例10: pchbattach
void
pchbattach(struct device *parent, struct device *self, void *aux)
{
struct pchb_softc *sc = (struct pchb_softc *)self;
struct pci_attach_args *pa = aux;
struct pcibus_attach_args pba;
pcireg_t bcreg, bir;
u_char pbnum;
pcitag_t tag;
int i, r;
int doattach = 0;
switch (PCI_VENDOR(pa->pa_id)) {
case PCI_VENDOR_AMD:
printf("\n");
switch (PCI_PRODUCT(pa->pa_id)) {
case PCI_PRODUCT_AMD_AMD64_0F_HT:
case PCI_PRODUCT_AMD_AMD64_10_HT:
for (i = 0; i < AMD64HT_NUM_LDT; i++)
pchb_amd64ht_attach(self, pa, i);
break;
}
break;
case PCI_VENDOR_INTEL:
switch (PCI_PRODUCT(pa->pa_id)) {
case PCI_PRODUCT_INTEL_82915G_HB:
case PCI_PRODUCT_INTEL_82945G_HB:
case PCI_PRODUCT_INTEL_82925X_HB:
case PCI_PRODUCT_INTEL_82955X_HB:
sc->sc_bt = pa->pa_memt;
if (bus_space_map(sc->sc_bt, I82802_IOBASE,
I82802_IOSIZE, 0, &sc->sc_bh))
break;
/* probe and init rng */
if (!(bus_space_read_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_HWST) & I82802_RNG_HWST_PRESENT))
break;
/* enable RNG */
bus_space_write_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_HWST,
bus_space_read_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_HWST) | I82802_RNG_HWST_ENABLE);
/* see if we can read anything */
for (i = 1000; i-- &&
!(bus_space_read_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_RNGST) & I82802_RNG_RNGST_DATAV); )
DELAY(10);
if (!(bus_space_read_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_RNGST) & I82802_RNG_RNGST_DATAV))
break;
r = bus_space_read_1(sc->sc_bt, sc->sc_bh,
I82802_RNG_DATA);
timeout_set(&sc->sc_rng_to, pchb_rnd, sc);
sc->sc_rng_i = 4;
pchb_rnd(sc);
sc->sc_rng_active = 1;
break;
}
printf("\n");
break;
case PCI_VENDOR_VIATECH:
switch (PCI_PRODUCT(pa->pa_id)) {
case PCI_PRODUCT_VIATECH_VT8251_PCIE_0:
/*
* Bump the host bridge into PCI-PCI bridge
* mode by clearing magic bit on the VLINK
* device. This allows us to read the bus
* number for the PCI bus attached to this
* host bridge.
*/
tag = pci_make_tag(pa->pa_pc, 0, 17, 7);
bcreg = pci_conf_read(pa->pa_pc, tag, 0xfc);
bcreg &= ~0x00000004; /* XXX Magic */
pci_conf_write(pa->pa_pc, tag, 0xfc, bcreg);
bir = pci_conf_read(pa->pa_pc,
pa->pa_tag, PPB_REG_BUSINFO);
pbnum = PPB_BUSINFO_PRIMARY(bir);
if (pbnum > 0)
doattach = 1;
/* Switch back to host bridge mode. */
bcreg |= 0x00000004; /* XXX Magic */
pci_conf_write(pa->pa_pc, tag, 0xfc, bcreg);
break;
}
printf("\n");
break;
default:
printf("\n");
break;
}
#if NAGP > 0
//.........这里部分代码省略.........
示例11: programMode
static uint8_t programMode(){
int i = 0;
char confirm[3];
DELAY(API_DELAY);
DELAY(API_DELAY);
UART_putString(xbeeUartId, "+++", 3);
DELAY(API_DELAY);
//wait for "OK\r"
do {
confirm[i] = UART_getChar(xbeeUartId);
if (confirm[i] != 0)
i++;
} while(i < 3);
if (!(confirm[0] == 0x4F && confirm[1] == 0x4B && confirm[2] == 0x0D)){
return FAILURE;
}
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATRE\r", 5);// Resets to Factory settings
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATCH15\r", 7);
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATDH0\r", 6);
DELAY(API_DELAY);
#ifdef UNICAST_MSG
#ifdef IS_COMPAS
UART_putString(xbeeUartId, "ATDLAAC3\r", 9);
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATMYBC64\r", 9);
#else
UART_putString(xbeeUartId, "ATDLBC64\r", 9);
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATMYAAC3\r", 9);
#endif
DELAY(API_DELAY);
#endif
UART_putString(xbeeUartId, "ATWR\r", 5);//Writes the command to memory
DELAY(API_DELAY);
UART_putString(xbeeUartId, "ATCN\r", 5);//Leave the menu.
return SUCCESS;
}
示例12: dec_eb164_cons_init
static void
dec_eb164_cons_init()
{
struct ctb *ctb;
struct cia_config *ccp;
extern struct cia_config cia_configuration;
ccp = &cia_configuration;
cia_init(ccp, 0);
ctb = (struct ctb *)(((caddr_t)hwrpb) + hwrpb->rpb_ctb_off);
switch (ctb->ctb_term_type) {
case CTB_PRINTERPORT:
/* serial console ... */
/* XXX */
{
/*
* Delay to allow PROM putchars to complete.
* FIFO depth * character time,
* character time = (1000000 / (defaultrate / 10))
*/
DELAY(160000000 / comcnrate);
if(comcnattach(&ccp->cc_iot, 0x3f8, comcnrate,
COM_FREQ,
(TTYDEF_CFLAG & ~(CSIZE | PARENB)) | CS8))
panic("can't init serial console");
break;
}
case CTB_GRAPHICS:
#if NPCKBD > 0
/* display console ... */
/* XXX */
(void) pckbc_cnattach(&ccp->cc_iot, IO_KBD, KBCMDP,
PCKBC_KBD_SLOT, 0);
/*
* On at least LX164, SRM reports an isa video board
* as a pci slot with 0xff as the bus and slot numbers.
* Since these values are not plausible from a pci point
* of view, it is safe to check for them.
*/
if (CTB_TURBOSLOT_TYPE(ctb->ctb_turboslot) ==
CTB_TURBOSLOT_TYPE_ISA ||
(CTB_TURBOSLOT_BUS(ctb->ctb_turboslot) == 0xff &&
CTB_TURBOSLOT_SLOT(ctb->ctb_turboslot) == 0xff))
isa_display_console(&ccp->cc_iot, &ccp->cc_memt);
else
pci_display_console(&ccp->cc_iot, &ccp->cc_memt,
&ccp->cc_pc, CTB_TURBOSLOT_BUS(ctb->ctb_turboslot),
CTB_TURBOSLOT_SLOT(ctb->ctb_turboslot), 0);
#else
panic("not configured to use display && keyboard console");
#endif
break;
default:
printf("ctb->ctb_term_type = 0x%lx\n", ctb->ctb_term_type);
printf("ctb->ctb_turboslot = 0x%lx\n", ctb->ctb_turboslot);
panic("consinit: unknown console type %ld",
ctb->ctb_term_type);
}
}
示例13: iavc_isa_probe
static int
iavc_isa_probe(device_t dev)
{
struct iavc_softc *sc;
int ret = ENXIO;
int unit = device_get_unit(dev);
if(isa_get_vendorid(dev)) /* no PnP probes here */
return ENXIO;
/* check max unit range */
if (unit >= IAVC_MAXUNIT)
{
kprintf("iavc%d: too many units\n", unit);
return(ENXIO);
}
sc = iavc_find_sc(unit); /* get softc */
sc->sc_unit = unit;
if (!(sc->sc_resources.io_base[0] =
bus_alloc_resource(dev, SYS_RES_IOPORT,
&sc->sc_resources.io_rid[0],
0UL, ~0UL, B1_IOLENGTH, RF_ACTIVE)))
{
kprintf("iavc%d: can't allocate io region\n", unit);
return(ENXIO);
}
sc->sc_iobase = rman_get_start(sc->sc_resources.io_base[0]);
switch(sc->sc_iobase)
{
case 0x150:
case 0x250:
case 0x300:
case 0x340:
break;
default:
kprintf("iavc%d: ERROR, invalid i/o base addr 0x%x configured!\n", sc->sc_unit, sc->sc_iobase);
bus_release_resource(dev, SYS_RES_IOPORT,
sc->sc_resources.io_rid[0],
sc->sc_resources.io_base[0]);
return(ENXIO);
}
sc->sc_io_bt = rman_get_bustag(sc->sc_resources.io_base[0]);
sc->sc_io_bh = rman_get_bushandle(sc->sc_resources.io_base[0]);
/* setup characteristics */
sc->sc_t1 = FALSE;
sc->sc_dma = FALSE;
sc->sc_capi.card_type = CARD_TYPEC_AVM_B1_ISA;
sc->sc_capi.sc_nbch = 2;
b1_reset(sc);
DELAY(100);
ret = b1_detect(sc);
if(ret)
{
kprintf("iavc%d: no card ? b1_detect returns %0x02x\n", sc->sc_unit, ret);
return(ENXIO);
}
DELAY(100);
b1_reset(sc);
DELAY(100);
if(bootverbose)
{
kprintf("iavc%d: class = 0x%02x, rev = 0x%02x\n", sc->sc_unit,
iavc_read_port(sc, B1_ANALYSE),
iavc_read_port(sc, B1_REVISION));
}
device_set_desc(dev, "AVM B1 ISA");
return(0);
}
示例14: dotg_obio_attach
static int
dotg_obio_attach(device_t dev)
{
struct dotg_obio_softc *sc = device_get_softc(dev);
int err;
/* setup controller interface softc */
/* initialise some bus fields */
sc->sc_dci.sc_dev = dev;
sc->sc_dci.sc_bus.parent = dev;
sc->sc_dci.sc_bus.devices = sc->sc_dci.sc_devices;
sc->sc_dci.sc_bus.devices_max = DOTG_MAX_DEVICES;
/* get all DMA memory */
if (usb_bus_mem_alloc_all(&sc->sc_dci.sc_bus,
USB_GET_DMA_TAG(dev), NULL)) {
printf("No mem\n");
return (ENOMEM);
}
sc->sc_dci.sc_mem_rid = 0;
sc->sc_dci.sc_mem_res =
bus_alloc_resource_any(dev, SYS_RES_MEMORY, &sc->sc_dci.sc_irq_rid,
RF_ACTIVE);
if (!(sc->sc_dci.sc_mem_res)) {
printf("Can`t alloc MEM\n");
goto error;
}
sc->sc_dci.sc_bst = rman_get_bustag(sc->sc_dci.sc_mem_res);
sc->sc_dci.sc_bsh = rman_get_bushandle(sc->sc_dci.sc_mem_res);
sc->sc_dci.sc_irq_rid = 0;
sc->sc_dci.sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ,
&sc->sc_dci.sc_irq_rid, RF_SHAREABLE| RF_ACTIVE);
if (!(sc->sc_dci.sc_irq_res)) {
printf("Can`t alloc IRQ\n");
goto error;
}
sc->sc_dci.sc_bus.bdev = device_add_child(dev, "usbus", -1);
if (!(sc->sc_dci.sc_bus.bdev)) {
printf("Can`t add usbus\n");
goto error;
}
device_set_ivars(sc->sc_dci.sc_bus.bdev, &sc->sc_dci.sc_bus);
#if (__FreeBSD_version >= 700031)
err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res,
INTR_TYPE_BIO | INTR_MPSAFE, NULL, (driver_intr_t *)dotg_interrupt,
sc, &sc->sc_dci.sc_intr_hdl);
#else
err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res,
INTR_TYPE_BIO | INTR_MPSAFE, (driver_intr_t *)dotg_interrupt,
sc, &sc->sc_dci.sc_intr_hdl);
#endif
if (err) {
sc->sc_dci.sc_intr_hdl = NULL;
printf("Can`t set IRQ handle\n");
goto error;
}
/* Run clock for OTG core */
rt305x_sysctl_set(SYSCTL_CLKCFG1, rt305x_sysctl_get(SYSCTL_CLKCFG1) |
SYSCTL_CLKCFG1_OTG_CLK_EN);
rt305x_sysctl_set(SYSCTL_RSTCTRL, SYSCTL_RSTCTRL_OTG);
DELAY(100);
err = dotg_init(&sc->sc_dci);
if (err) printf("dotg_init fail\n");
if (!err) {
err = device_probe_and_attach(sc->sc_dci.sc_bus.bdev);
if (err) printf("device_probe_and_attach fail\n");
}
if (err) {
goto error;
}
return (0);
error:
dotg_obio_detach(dev);
return (ENXIO);
}
示例15: comattach
void
comattach(struct device *parent, struct device *dev, void *aux)
{
struct com_softc *sc = (struct com_softc *)dev;
int iobase = (int)&IODEVbase->psx16550;
#ifdef COM_HAYESP
int hayesp_ports[] = { 0x140, 0x180, 0x280, 0x300, 0 };
int *hayespp;
#endif
com_attached = 1;
callout_init(&sc->sc_diag_ch, 0);
callout_init(&com_poll_ch, 0);
sc->sc_iobase = iobase;
sc->sc_hwflags = 0;
sc->sc_swflags = 0;
printf(": iobase %x", sc->sc_iobase);
#ifdef COM_HAYESP
/* Look for a Hayes ESP board. */
for (hayespp = hayesp_ports; *hayespp != 0; hayespp++)
if (comprobeHAYESP(*hayespp, sc)) {
sc->sc_hayespbase = *hayespp;
break;
}
/* No ESP; look for other things. */
if (*hayespp == 0) {
#endif
/* look for a NS 16550AF UART with FIFOs */
outb(pio(iobase , com_fifo),
FIFO_ENABLE | FIFO_RCV_RST | FIFO_XMT_RST | FIFO_TRIGGER_14);
DELAY(100);
if (ISSET(inb(pio(iobase , com_iir)), IIR_FIFO_MASK) == IIR_FIFO_MASK)
if (ISSET(inb(pio(iobase , com_fifo)), FIFO_TRIGGER_14) == FIFO_TRIGGER_14) {
SET(sc->sc_hwflags, COM_HW_FIFO);
printf(": ns16550a, working fifo\n");
} else
printf(": ns16550, broken fifo\n");
else
printf(": ns8250 or ns16450, no fifo\n");
outb(pio(iobase , com_fifo), 0);
#ifdef COM_HAYESP
}
#endif
/* disable interrupts */
outb(pio(iobase , com_ier), 0);
outb(pio(iobase , com_mcr), 0);
if (sc->sc_iobase == CONADDR) {
/*
* Need to reset baud rate, etc. of next print so reset
* comconsinit. Also make sure console is always "hardwired".
*/
comconsinit = 0;
SET(sc->sc_hwflags, COM_HW_CONSOLE);
SET(sc->sc_swflags, COM_SW_SOFTCAR);
}
}