PERFORCE change 100534 for review
Peter Wemm
peter at FreeBSD.org
Tue Jul 4 01:07:54 UTC 2006
http://perforce.freebsd.org/chv.cgi?CH=100534
Change 100534 by peter at peter_daintree on 2006/07/04 01:07:41
IFC @100533
Affected files ...
.. //depot/projects/bike_sched/sys/amd64/amd64/pmap.c#3 integrate
.. //depot/projects/bike_sched/sys/arm/at91/at91_pio.c#2 integrate
.. //depot/projects/bike_sched/sys/arm/at91/at91_pio_rm9200.h#1 branch
.. //depot/projects/bike_sched/sys/arm/at91/at91_piovar.h#1 branch
.. //depot/projects/bike_sched/sys/arm/at91/uart_dev_at91usart.c#2 integrate
.. //depot/projects/bike_sched/sys/bsm/audit_kevents.h#2 integrate
.. //depot/projects/bike_sched/sys/bsm/audit_record.h#3 integrate
.. //depot/projects/bike_sched/sys/compat/svr4/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/conf/kmod.mk#2 integrate
.. //depot/projects/bike_sched/sys/dev/atkbdc/atkbdc_isa.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/bktr/CHANGELOG.TXT#2 integrate
.. //depot/projects/bike_sched/sys/dev/isp/isp.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/isp/isp_pci.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/isp/ispmbox.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/isp/ispreg.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/isp/ispvar.h#2 integrate
.. //depot/projects/bike_sched/sys/dev/ispfw/asm_2322.h#1 branch
.. //depot/projects/bike_sched/sys/dev/ispfw/ispfw.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/acphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/amphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/bmtphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/brgphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/ciphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/e1000phy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/exphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/inphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/lxtphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/mii_physubr.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/mlphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/nsgphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/nsphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/pnaphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/qsphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/rgephy.c#3 integrate
.. //depot/projects/bike_sched/sys/dev/mii/rlphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/ruephy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/tdkphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/tlphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/ukphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/mii/xmphy.c#2 integrate
.. //depot/projects/bike_sched/sys/dev/usb/if_ural.c#2 integrate
.. //depot/projects/bike_sched/sys/geom/mirror/g_mirror.c#2 integrate
.. //depot/projects/bike_sched/sys/geom/raid3/g_raid3.c#2 integrate
.. //depot/projects/bike_sched/sys/i386/i386/pmap.c#3 integrate
.. //depot/projects/bike_sched/sys/kern/sched_4bsd.c#7 integrate
.. //depot/projects/bike_sched/sys/modules/bktr/bktr_mem/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/streams/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/modules/svr4/Makefile#2 integrate
.. //depot/projects/bike_sched/sys/net/bpf.c#3 integrate
.. //depot/projects/bike_sched/sys/powerpc/powerpc/mmu_oea.c#3 integrate
.. //depot/projects/bike_sched/sys/security/audit/audit.h#2 integrate
.. //depot/projects/bike_sched/sys/security/audit/audit_arg.c#3 integrate
Differences ...
==== //depot/projects/bike_sched/sys/amd64/amd64/pmap.c#3 (text+ko) ====
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.560 2006/06/27 04:28:22 alc Exp $");
+__FBSDID("$FreeBSD: src/sys/amd64/amd64/pmap.c,v 1.563 2006/07/02 18:22:46 alc Exp $");
/*
* Manages physical address maps.
@@ -490,8 +490,7 @@
* (physical) address starting relative to 0]
*/
void
-pmap_bootstrap(firstaddr)
- vm_paddr_t *firstaddr;
+pmap_bootstrap(vm_paddr_t *firstaddr)
{
vm_offset_t va;
pt_entry_t *pte, *unused;
@@ -1132,8 +1131,7 @@
}
void
-pmap_pinit0(pmap)
- struct pmap *pmap;
+pmap_pinit0(pmap_t pmap)
{
PMAP_LOCK_INIT(pmap);
@@ -1148,8 +1146,7 @@
* such as one in a vmspace structure.
*/
void
-pmap_pinit(pmap)
- register struct pmap *pmap;
+pmap_pinit(pmap_t pmap)
{
vm_page_t pml4pg;
static vm_pindex_t color;
@@ -1611,9 +1608,9 @@
vm_page_flag_clear(m, PG_WRITEABLE);
m->md.pv_list_count--;
pmap_unuse_pt(pmap, va, ptepde);
+ free_pv_entry(pmap, pv);
if (pmap != locked_pmap)
PMAP_UNLOCK(pmap);
- free_pv_entry(locked_pmap, pv);
}
}
}
@@ -1979,7 +1976,7 @@
void
pmap_remove_all(vm_page_t m)
{
- register pv_entry_t pv;
+ pv_entry_t pv;
pmap_t pmap;
pt_entry_t *pte, tpte;
pd_entry_t ptepde;
@@ -2145,7 +2142,7 @@
{
vm_paddr_t pa;
pd_entry_t *pde;
- register pt_entry_t *pte;
+ pt_entry_t *pte;
vm_paddr_t opa;
pt_entry_t origpte, newpte;
vm_page_t mpte, om;
@@ -2582,12 +2579,9 @@
* The mapping must already exist in the pmap.
*/
void
-pmap_change_wiring(pmap, va, wired)
- register pmap_t pmap;
- vm_offset_t va;
- boolean_t wired;
+pmap_change_wiring(pmap_t pmap, vm_offset_t va, boolean_t wired)
{
- register pt_entry_t *pte;
+ pt_entry_t *pte;
/*
* Wiring is not a hardware characteristic so there is no need to
@@ -2796,9 +2790,7 @@
* subset of pmaps for proper page aging.
*/
boolean_t
-pmap_page_exists_quick(pmap, m)
- pmap_t pmap;
- vm_page_t m;
+pmap_page_exists_quick(pmap_t pmap, vm_page_t m)
{
pv_entry_t pv;
int loops = 0;
@@ -2982,7 +2974,7 @@
static __inline void
pmap_clear_ptes(vm_page_t m, long bit)
{
- register pv_entry_t pv;
+ pv_entry_t pv;
pmap_t pmap;
pt_entry_t pbits, *pte;
@@ -3052,35 +3044,26 @@
int
pmap_ts_referenced(vm_page_t m)
{
- register pv_entry_t pv, pvf, pvn;
+ pv_entry_t pv, pvf, pvn;
pmap_t pmap;
pt_entry_t *pte;
- pt_entry_t v;
int rtval = 0;
if (m->flags & PG_FICTITIOUS)
return (rtval);
-
mtx_assert(&vm_page_queue_mtx, MA_OWNED);
if ((pv = TAILQ_FIRST(&m->md.pv_list)) != NULL) {
-
pvf = pv;
-
do {
pvn = TAILQ_NEXT(pv, pv_list);
-
TAILQ_REMOVE(&m->md.pv_list, pv, pv_list);
-
TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
-
pmap = PV_PMAP(pv);
PMAP_LOCK(pmap);
pte = pmap_pte(pmap, pv->pv_va);
-
- if (pte && ((v = pte_load(pte)) & PG_A) != 0) {
+ if (pte != NULL && (*pte & PG_A) != 0) {
atomic_clear_long(pte, PG_A);
pmap_invalidate_page(pmap, pv->pv_va);
-
rtval++;
if (rtval > 4) {
PMAP_UNLOCK(pmap);
@@ -3090,7 +3073,6 @@
PMAP_UNLOCK(pmap);
} while ((pv = pvn) != NULL && pv != pvf);
}
-
return (rtval);
}
@@ -3125,9 +3107,7 @@
* NOT real memory.
*/
void *
-pmap_mapdev(pa, size)
- vm_paddr_t pa;
- vm_size_t size;
+pmap_mapdev(vm_paddr_t pa, vm_size_t size)
{
vm_offset_t va, tmpva, offset;
@@ -3151,9 +3131,7 @@
}
void
-pmap_unmapdev(va, size)
- vm_offset_t va;
- vm_size_t size;
+pmap_unmapdev(vm_offset_t va, vm_size_t size)
{
vm_offset_t base, offset, tmpva;
@@ -3173,9 +3151,7 @@
* perform the pmap work for mincore
*/
int
-pmap_mincore(pmap, addr)
- pmap_t pmap;
- vm_offset_t addr;
+pmap_mincore(pmap_t pmap, vm_offset_t addr)
{
pt_entry_t *ptep, pte;
vm_page_t m;
==== //depot/projects/bike_sched/sys/arm/at91/at91_pio.c#2 (text) ====
@@ -23,7 +23,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/at91_pio.c,v 1.1 2006/03/24 07:39:29 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/at91_pio.c,v 1.2 2006/07/02 03:50:44 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -38,7 +38,9 @@
#include <sys/rman.h>
#include <machine/bus.h>
+#include <arm/at91/at91rm92reg.h>
#include <arm/at91/at91_pioreg.h>
+#include <arm/at91/at91_piovar.h>
struct at91_pio_softc
{
@@ -103,7 +105,26 @@
static int
at91_pio_probe(device_t dev)
{
- device_set_desc(dev, "PIO");
+ const char *name;
+
+ switch (device_get_unit(dev)) {
+ case 0:
+ name = "PIOA";
+ break;
+ case 1:
+ name = "PIOB";
+ break;
+ case 2:
+ name = "PIOC";
+ break;
+ case 3:
+ name = "PIOD";
+ break;
+ default:
+ name = "PIO";
+ break;
+ }
+ device_set_desc(dev, name);
return (0);
}
@@ -118,6 +139,9 @@
if (err)
goto out;
+ device_printf(dev, "ABSR: %#x OSR: %#x PSR:%#x ODSR: %#x\n",
+ RD4(sc, PIO_ABSR), RD4(sc, PIO_OSR), RD4(sc, PIO_PSR),
+ RD4(sc, PIO_ODSR));
AT91_PIO_LOCK_INIT(sc);
/*
@@ -250,6 +274,69 @@
return (ENXIO);
}
+/*
+ * The following functions are called early in the boot process, so
+ * don't use bus_space, as that isn't yet available when we need to use
+ * them.
+ */
+void
+at91_pio_use_periph_a(uint32_t pio, uint32_t periph_a_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_ASR / 4] = periph_a_mask;
+ PIO[PIO_PDR / 4] = periph_a_mask;
+}
+
+void
+at91_pio_use_periph_b(uint32_t pio, uint32_t periph_b_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_BSR / 4] = periph_b_mask;
+ PIO[PIO_PDR / 4] = periph_b_mask;
+}
+
+void
+at91_pio_use_gpio(uint32_t pio, uint32_t gpio_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_PER / 4] = gpio_mask;
+}
+
+void
+at91_pio_gpio_input(uint32_t pio, uint32_t input_enable_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_ODR / 4] = input_enable_mask;
+}
+
+void
+at91_pio_gpio_output(uint32_t pio, uint32_t output_enable_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_OER / 4] = output_enable_mask;
+}
+
+void
+at91_pio_gpio_set(uint32_t pio, uint32_t data_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_SODR / 4] = data_mask;
+}
+
+void
+at91_pio_gpio_clear(uint32_t pio, uint32_t data_mask)
+{
+ uint32_t *PIO = (uint32_t *)(AT91RM92_BASE + pio);
+
+ PIO[PIO_CODR / 4] = data_mask;
+}
+
static device_method_t at91_pio_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, at91_pio_probe),
==== //depot/projects/bike_sched/sys/arm/at91/uart_dev_at91usart.c#2 (text) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.6 2006/05/13 23:41:16 cognet Exp $");
+__FBSDID("$FreeBSD: src/sys/arm/at91/uart_dev_at91usart.c,v 1.7 2006/07/02 03:45:33 imp Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -45,19 +45,29 @@
#include "uart_if.h"
+#define DEFAULT_RCLK AT91C_MASTER_CLOCK
+#define USART_BUFFER_SIZE 128
+
/*
* High-level UART interface.
*/
+struct at91_usart_rx {
+ bus_addr_t pa;
+ uint8_t buffer[USART_BUFFER_SIZE];
+ bus_dmamap_t map;
+};
+
struct at91_usart_softc {
struct uart_softc base;
bus_dma_tag_t dmatag; /* bus dma tag for mbufs */
bus_dmamap_t tx_map;
- bus_dmamap_t rx_map;
+ uint32_t flags;
+#define HAS_TIMEOUT 1
+ struct at91_usart_rx ping_pong[2];
+ struct at91_usart_rx *ping;
+ struct at91_usart_rx *pong;
};
-#define DEFAULT_RCLK AT91C_MASTER_CLOCK
-#define USART_BUFFER_SIZE 128
-
#define RD4(bas, reg) \
bus_space_read_4((bas)->bst, (bas)->bsh, uart_regofs(bas, reg))
#define WR4(bas, reg, value) \
@@ -72,6 +82,9 @@
} \
} while (0);
+#define BAUD2DIVISOR(b) \
+ ((((DEFAULT_RCLK * 10) / ((b) * 16)) + 5) / 10)
+
/*
* Low-level UART interface.
*/
@@ -147,16 +160,19 @@
}
/*
- * Or in the stop bits. Note: The hardware supports
- * 1.5 stop bits in async mode, but there's no way to
- * specify that AFAICT.
+ * Or in the stop bits. Note: The hardware supports 1.5 stop
+ * bits in async mode, but there's no way to specify that
+ * AFAICT. Instead, rely on the convention documented at
+ * http://www.lammertbies.nl/comm/info/RS-232_specs.html which
+ * states that 1.5 stop bits are used for 5 bit bytes and
+ * 2 stop bits only for longer bytes.
*/
- if (stopbits > 1)
+ if (stopbits == 1)
+ mr |= USART_MR_NBSTOP_1;
+ else if (databits > 5)
mr |= USART_MR_NBSTOP_2;
else
- mr |= USART_MR_NBSTOP_2;
- /* else if (stopbits == 1.5)
- mr |= USART_MR_NBSTOP_1_5; */
+ mr |= USART_MR_NBSTOP_1_5;
/*
* We want normal plumbing mode too, none of this fancy
@@ -167,6 +183,13 @@
mr &= ~USART_MR_MSBF; /* lsb first */
mr &= ~USART_MR_CKLO_SCK; /* Don't drive SCK */
+ WR4(bas, USART_MR, mr);
+
+ /*
+ * Set the baud rate
+ */
+ WR4(bas, USART_BRGR, BAUD2DIVISOR(baudrate));
+
/* XXX Need to take possible synchronous mode into account */
return (0);
}
@@ -188,25 +211,19 @@
}
/*
- * Initialize this device (I think as the console)
+ * Initialize this device for use as a console.
*/
static void
at91_usart_init(struct uart_bas *bas, int baudrate, int databits, int stopbits,
int parity)
{
- int cr;
at91_usart_param(bas, baudrate, databits, stopbits, parity);
- /* Turn on rx and tx */
- cr = USART_CR_RSTSTA | USART_CR_RSTRX | USART_CR_RSTTX;
- WR4(bas, USART_CR, cr);
+ /* Reset the rx and tx buffers and turn on rx and tx */
+ WR4(bas, USART_CR, USART_CR_RSTSTA | USART_CR_RSTRX | USART_CR_RSTTX);
WR4(bas, USART_CR, USART_CR_RXEN | USART_CR_TXEN);
- WR4(bas, USART_IER, USART_CSR_TIMEOUT |
- USART_CSR_TXRDY | USART_CSR_RXRDY |
- USART_CSR_RXBRK | USART_CSR_ENDRX | USART_CSR_ENDTX);
- /* Set the receive timeout to be 1.5 character times. */
- WR4(bas, USART_RTOR, 12);
+ WR4(bas, USART_IDR, 0xffffffff);
}
/*
@@ -227,8 +244,8 @@
at91_usart_putc(struct uart_bas *bas, int c)
{
- while (!(RD4(bas, USART_CSR) &
- USART_CSR_TXRDY));
+ while (!(RD4(bas, USART_CSR) & USART_CSR_TXRDY))
+ continue;
WR4(bas, USART_THR, c);
}
@@ -252,8 +269,8 @@
{
int c;
- while (!(RD4(bas, USART_CSR) & USART_CSR_RXRDY))
- ;
+ while (!(RD4(bas, USART_CSR) & USART_CSR_RXRDY))
+ continue;
c = RD4(bas, USART_RHR);
c &= 0xff;
return (c);
@@ -291,14 +308,35 @@
return (0);
}
+#ifndef SKYEYE_WORKAROUNDS
+static void
+at91_getaddr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
+{
+ if (error != 0)
+ return;
+ *(bus_addr_t *)arg = segs[0].ds_addr;
+}
+#endif
+
static int
at91_usart_bus_attach(struct uart_softc *sc)
{
- int err;
+ int err, i;
+ uint32_t cr;
struct at91_usart_softc *atsc;
atsc = (struct at91_usart_softc *)sc;
+ /*
+ * See if we have a TIMEOUT bit. We disable all interrupts to
+ * minimize interference.
+ */
+ WR4(&sc->sc_bas, USART_IDR, 0xffffffff);
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_TIMEOUT);
+ if (RD4(&sc->sc_bas, USART_IMR) & USART_CSR_TIMEOUT)
+ atsc->flags |= HAS_TIMEOUT;
+ WR4(&sc->sc_bas, USART_IDR, 0xffffffff);
+
sc->sc_txfifosz = USART_BUFFER_SIZE;
sc->sc_rxfifosz = USART_BUFFER_SIZE;
sc->sc_hwiflow = 0;
@@ -314,25 +352,62 @@
err = bus_dmamap_create(atsc->dmatag, 0, &atsc->tx_map);
if (err != 0)
goto errout;
- err = bus_dmamap_create(atsc->dmatag, 0, &atsc->rx_map);
- if (err != 0)
- goto errout;
+ if (atsc->flags & HAS_TIMEOUT) {
+ for (i = 0; i < 2; i++) {
+ err = bus_dmamap_create(atsc->dmatag, 0,
+ &atsc->ping_pong[i].map);
+ if (err != 0)
+ goto errout;
+ err = bus_dmamap_load(atsc->dmatag,
+ atsc->ping_pong[i].map,
+ atsc->ping_pong[i].buffer, sc->sc_rxfifosz,
+ at91_getaddr, &atsc->ping_pong[i].pa, 0);
+ if (err != 0)
+ goto errout;
+ bus_dmamap_sync(atsc->dmatag, atsc->ping_pong[i].map,
+ BUS_DMASYNC_PREREAD);
+ }
+ atsc->ping = &atsc->ping_pong[0];
+ atsc->pong = &atsc->ping_pong[1];
+ }
+
+ /*
+ * Prime the pump with the RX buffer. We use two 64 byte bounce
+ * buffers here to avoid data overflow.
+ */
+
+ /* Turn on rx and tx */
+ cr = USART_CR_RSTSTA | USART_CR_RSTRX | USART_CR_RSTTX;
+ WR4(&sc->sc_bas, USART_CR, cr);
+ WR4(&sc->sc_bas, USART_CR, USART_CR_RXEN | USART_CR_TXEN);
+
+ /*
+ * Setup the PDC to receive data. We use the ping-pong buffers
+ * so that we can more easily bounce between the two and so that
+ * we get an interrupt 1/2 way through the software 'fifo' we have
+ * to avoid overruns.
+ */
+ if (atsc->flags & HAS_TIMEOUT) {
+ WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
+ WR4(&sc->sc_bas, PDC_RCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, PDC_RNPR, atsc->pong->pa);
+ WR4(&sc->sc_bas, PDC_RNCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_RXTEN);
+
+ /* Set the receive timeout to be 1.5 character times. */
+ WR4(&sc->sc_bas, USART_RTOR, 12);
+ WR4(&sc->sc_bas, USART_CR, USART_CR_STTTO);
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_TIMEOUT |
+ USART_CSR_RXBUFF | USART_CSR_ENDRX);
+ } else {
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_RXRDY);
+ }
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_RXBRK);
errout:;
// XXX bad
return (err);
}
-#ifndef SKYEYE_WORKAROUNDS
-static void
-at91_getaddr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
-{
- if (error != 0)
- return;
- *(bus_addr_t *)arg = segs[0].ds_addr;
-}
-#endif
-
-
static int
at91_usart_bus_transmit(struct uart_softc *sc)
{
@@ -359,6 +434,7 @@
WR4(&sc->sc_bas, PDC_TPR, addr);
WR4(&sc->sc_bas, PDC_TCR, sc->sc_txdatasz);
WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_TXTEN);
+ WR4(&sc->sc_bas, USART_IER, USART_CSR_ENDTX);
uart_unlock(sc->sc_hwmtx);
#else
for (int i = 0; i < sc->sc_txdatasz; i++)
@@ -387,9 +463,7 @@
} while (!atomic_cmpset_32(&sc->sc_hwsig, old, new));
bas = &sc->sc_bas;
uart_lock(sc->sc_hwmtx);
- cr = RD4(bas, USART_CR);
- cr &= ~(USART_CR_DTREN | USART_CR_DTRDIS | USART_CR_RTSEN |
- USART_CR_RTSDIS);
+ cr = 0;
if (new & SER_DTR)
cr |= USART_CR_DTREN;
else
@@ -405,16 +479,14 @@
static int
at91_usart_bus_receive(struct uart_softc *sc)
{
-
- uart_lock(sc->sc_hwmtx);
- uart_rx_put(sc, at91_usart_getc(&sc->sc_bas, NULL));
- uart_unlock(sc->sc_hwmtx);
+
return (0);
}
static int
at91_usart_bus_param(struct uart_softc *sc, int baudrate, int databits,
int stopbits, int parity)
{
+
return (at91_usart_param(&sc->sc_bas, baudrate, databits, stopbits,
parity));
}
@@ -422,8 +494,9 @@
at91_usart_bus_ipend(struct uart_softc *sc)
{
int csr = RD4(&sc->sc_bas, USART_CSR);
- int ipend = 0;
+ int ipend = 0, i, len;
struct at91_usart_softc *atsc;
+ struct at91_usart_rx *p;
atsc = (struct at91_usart_softc *)sc;
if (csr & USART_CSR_ENDTX) {
@@ -432,12 +505,85 @@
bus_dmamap_unload(atsc->dmatag, atsc->tx_map);
}
uart_lock(sc->sc_hwmtx);
- if (csr & USART_CSR_TXRDY && sc->sc_txbusy)
- ipend |= SER_INT_TXIDLE;
- if (csr & USART_CSR_ENDTX && sc->sc_txbusy)
- ipend |= SER_INT_TXIDLE;
- if (csr & (USART_CSR_RXRDY /* | USART_CSR_ENDRX | USART_CSR_TIMEOUT */))
+ if (csr & USART_CSR_TXRDY) {
+ if (sc->sc_txbusy)
+ ipend |= SER_INT_TXIDLE;
+ WR4(&sc->sc_bas, USART_IDR, USART_CSR_TXRDY);
+ }
+ if (csr & USART_CSR_ENDTX) {
+ if (sc->sc_txbusy)
+ ipend |= SER_INT_TXIDLE;
+ WR4(&sc->sc_bas, USART_IDR, USART_CSR_ENDTX);
+ }
+
+ /*
+ * Due to the contraints of the DMA engine present in the
+ * atmel chip, I can't just say I have a rx interrupt pending
+ * and do all the work elsewhere. I need to look at the CSR
+ * bits right now and do things based on them to avoid races.
+ */
+ if ((atsc->flags & HAS_TIMEOUT) && (csr & USART_CSR_RXBUFF)) {
+ // Have a buffer overflow. Copy all data from both
+ // ping and pong. Insert overflow character. Reset
+ // ping and pong and re-enable the PDC to receive
+ // characters again.
+ bus_dmamap_sync(atsc->dmatag, atsc->ping->map,
+ BUS_DMASYNC_POSTREAD);
+ bus_dmamap_sync(atsc->dmatag, atsc->pong->map,
+ BUS_DMASYNC_POSTREAD);
+ for (i = 0; i < sc->sc_rxfifosz; i++)
+ uart_rx_put(sc, atsc->ping->buffer[i]);
+ for (i = 0; i < sc->sc_rxfifosz; i++)
+ uart_rx_put(sc, atsc->pong->buffer[i]);
+ uart_rx_put(sc, UART_STAT_OVERRUN);
+ csr &= ~(USART_CSR_ENDRX | USART_CSR_TIMEOUT);
+ WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
+ WR4(&sc->sc_bas, PDC_RCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, PDC_RNPR, atsc->pong->pa);
+ WR4(&sc->sc_bas, PDC_RNCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_RXTEN);
+ ipend |= SER_INT_RXREADY;
+ }
+ if ((atsc->flags & HAS_TIMEOUT) && (csr & USART_CSR_ENDRX)) {
+ // Shuffle data from 'ping' of ping pong buffer, but
+ // leave current 'pong' in place, as it has become the
+ // new 'ping'. We need to copy data and setup the old
+ // 'ping' as the new 'pong' when we're done.
+ bus_dmamap_sync(atsc->dmatag, atsc->ping->map,
+ BUS_DMASYNC_POSTREAD);
+ for (i = 0; i < sc->sc_rxfifosz; i++)
+ uart_rx_put(sc, atsc->ping->buffer[i]);
+ p = atsc->ping;
+ atsc->ping = atsc->pong;
+ atsc->pong = p;
+ WR4(&sc->sc_bas, PDC_RNPR, atsc->pong->pa);
+ WR4(&sc->sc_bas, PDC_RNCR, sc->sc_rxfifosz);
+ ipend |= SER_INT_RXREADY;
+ }
+ if ((atsc->flags & HAS_TIMEOUT) && (csr & USART_CSR_TIMEOUT)) {
+ // We have one partial buffer. We need to stop the
+ // PDC, get the number of characters left and from
+ // that compute number of valid characters. We then
+ // need to reset ping and pong and reenable the PDC.
+ // Not sure if there's a race here at fast baud rates
+ // we need to worry about.
+ WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_RXTDIS);
+ len = sc->sc_rxfifosz - RD4(&sc->sc_bas, PDC_RCR);
+ for (i = 0; i < len; i++)
+ uart_rx_put(sc, atsc->ping->buffer[i]);
+ WR4(&sc->sc_bas, PDC_RPR, atsc->ping->pa);
+ WR4(&sc->sc_bas, PDC_RCR, sc->sc_rxfifosz);
+ WR4(&sc->sc_bas, USART_CR, USART_CR_STTTO);
+ WR4(&sc->sc_bas, PDC_PTCR, PDC_PTCR_RXTEN);
+ ipend |= SER_INT_RXREADY;
+ }
+ if (!(atsc->flags & HAS_TIMEOUT) && (csr & USART_CSR_RXRDY)) {
+ // We have another charater in a device that doesn't support
+ // timeouts, so we do it one character at a time.
+ uart_rx_put(sc, RD4(&sc->sc_bas, USART_RHR) & 0xff);
ipend |= SER_INT_RXREADY;
+ }
+
if (csr & USART_CSR_RXBRK) {
unsigned int cr = USART_CR_RSTSTA;
@@ -479,6 +625,15 @@
static int
at91_usart_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
{
+ switch (request) {
+ case UART_IOCTL_BREAK:
+ case UART_IOCTL_IFLOW:
+ case UART_IOCTL_OFLOW:
+ break;
+ case UART_IOCTL_BAUD:
+ WR4(&sc->sc_bas, USART_BRGR, BAUD2DIVISOR(*(int *)data));
+ return (0);
+ }
return (EINVAL);
}
struct uart_class at91_usart_class = {
==== //depot/projects/bike_sched/sys/bsm/audit_kevents.h#2 (text) ====
@@ -30,8 +30,8 @@
*
* @APPLE_BSD_LICENSE_HEADER_END@
*
- * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#20 $
- * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.5 2006/02/06 01:12:46 rwatson Exp $
+ * $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_kevents.h#23 $
+ * $FreeBSD: src/sys/bsm/audit_kevents.h,v 1.6 2006/07/03 14:45:43 rwatson Exp $
*/
#ifndef _BSM_AUDIT_KEVENTS_H_
@@ -384,7 +384,24 @@
#define AUE_ACL_DELETE_FD 403 /* FreeBSD. */
#define AUE_ACL_CHECK_FILE 404 /* FreeBSD. */
#define AUE_ACL_CHECK_FD 405 /* FreeBSD. */
-#define AUE_SYSARCH 406 /* FreeBSD. */
+#define AUE_ACL_GET_LINK 406 /* FreeBSD. */
+#define AUE_ACL_SET_LINK 407 /* FreeBSD. */
+#define AUE_ACL_DELETE_LINK 408 /* FreeBSD. */
+#define AUE_ACL_CHECK_LINK 409 /* FreeBSD. */
+#define AUE_SYSARCH 410 /* FreeBSD. */
+#define AUE_EXTATTRCTL 411 /* FreeBSD. */
+#define AUE_EXTATTR_GET_FILE 412 /* FreeBSD. */
+#define AUE_EXTATTR_SET_FILE 413 /* FreeBSD. */
+#define AUE_EXTATTR_LIST_FILE 414 /* FreeBSD. */
+#define AUE_EXTATTR_DELETE_FILE 415 /* FreeBSD. */
+#define AUE_EXTATTR_GET_FD 416 /* FreeBSD. */
+#define AUE_EXTATTR_SET_FD 417 /* FreeBSD. */
+#define AUE_EXTATTR_LIST_FD 418 /* FreeBSD. */
+#define AUE_EXTATTR_DELETE_FD 419 /* FreeBSD. */
+#define AUE_EXTATTR_GET_LINK 420 /* FreeBSD. */
+#define AUE_EXTATTR_SET_LINK 421 /* FreeBSD. */
+#define AUE_EXTATTR_LIST_LINK 422 /* FreeBSD. */
+#define AUE_EXTATTR_DELETE_LINK 423 /* FreeBSD. */
/*
* Darwin BSM uses a number of AUE_O_* definitions, which are aliased to the
==== //depot/projects/bike_sched/sys/bsm/audit_record.h#3 (text) ====
@@ -31,12 +31,14 @@
* @APPLE_BSD_LICENSE_HEADER_END@
*
* $P4: //depot/projects/trustedbsd/audit3/sys/bsm/audit_record.h#13 $
- * $FreeBSD: src/sys/bsm/audit_record.h,v 1.2 2006/06/05 13:00:52 rwatson Exp $
+ * $FreeBSD: src/sys/bsm/audit_record.h,v 1.3 2006/07/03 14:44:13 rwatson Exp $
*/
#ifndef _BSM_AUDIT_RECORD_H_
#define _BSM_AUDIT_RECORD_H_
+#include <sys/time.h> /* struct timeval */
+
/*
* Token type identifiers.
*/
==== //depot/projects/bike_sched/sys/compat/svr4/Makefile#2 (text+ko) ====
@@ -1,8 +1,6 @@
# Makefile for syscall tables
#
-# $FreeBSD: src/sys/compat/svr4/Makefile,v 1.7 2001/09/13 22:02:48 julian Exp $
-
-MAINTAINER= newton at freebsd.org
+# $FreeBSD: src/sys/compat/svr4/Makefile,v 1.8 2006/07/01 10:51:54 markm Exp $
all:
@echo "make sysent only"
==== //depot/projects/bike_sched/sys/conf/kmod.mk#2 (text+ko) ====
@@ -1,5 +1,5 @@
# From: @(#)bsd.prog.mk 5.26 (Berkeley) 6/25/91
-# $FreeBSD: src/sys/conf/kmod.mk,v 1.208 2006/05/27 16:32:05 netchild Exp $
+# $FreeBSD: src/sys/conf/kmod.mk,v 1.209 2006/06/30 19:35:35 jkim Exp $
#
# The include file <bsd.kmod.mk> handles building and installing loadable
# kernel modules.
@@ -85,8 +85,10 @@
.if ${CC} == "icc"
NOSTDINC= -X
.else
+C_DIALECT= -std=c99
NOSTDINC= -nostdinc
.endif
+CFLAGS+= ${C_DIALECT}
CFLAGS:= ${CFLAGS:N-I*} ${NOSTDINC} -I- ${INCLMAGIC} ${CFLAGS:M-I*}
.if defined(KERNBUILDDIR)
CFLAGS+= -DHAVE_KERNEL_OPTION_HEADERS -include ${KERNBUILDDIR}/opt_global.h
==== //depot/projects/bike_sched/sys/dev/atkbdc/atkbdc_isa.c#3 (text+ko) ====
@@ -25,7 +25,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc_isa.c,v 1.35 2006/06/12 14:46:44 imp Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/atkbdc/atkbdc_isa.c,v 1.36 2006/07/03 23:40:58 jkim Exp $");
#include "opt_kbd.h"
@@ -112,15 +112,21 @@
* The AT keyboard controller uses two ports (a command/data port
* 0x60 and a status port 0x64), which may be given to us in
* one resource (0x60 through 0x64) or as two separate resources
- * (0x60 and 0x64). Furthermore, /boot/device.hints may contain
- * just one port, 0x60. We shall adjust resource settings
- * so that these two ports are available as two separate resources.
+ * (0x60 and 0x64). Some brain-damaged ACPI BIOS has reversed
+ * command/data port and status port. Furthermore, /boot/device.hints
+ * may contain just one port, 0x60. We shall adjust resource settings
+ * so that these two ports are available as two separate resources
+ * in correct order.
*/
device_quiet(dev);
rid = 0;
if (bus_get_resource(dev, SYS_RES_IOPORT, rid, &start, &count) != 0)
return ENXIO;
- if (count > 1) /* adjust the count */
+ if (start == IO_KBD + KBD_STATUS_PORT) {
+ start = IO_KBD;
+ count++;
+ }
+ if (count > 1) /* adjust the count and/or start port */
bus_set_resource(dev, SYS_RES_IOPORT, rid, start, 1);
port0 = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid, RF_ACTIVE);
if (port0 == NULL)
==== //depot/projects/bike_sched/sys/dev/bktr/CHANGELOG.TXT#2 (text+ko) ====
@@ -1,9 +1,4 @@
-/* $FreeBSD: src/sys/dev/bktr/CHANGELOG.TXT,v 1.20 2004/12/31 09:18:29 julian Exp $ */
-/*
- * MAINTAINER = Roger Hardiman <roger at freebsd.org>
- * Newsflash: Roger is temorararily out of touch and unable
- * to maintain this..
- */
+/* $FreeBSD: src/sys/dev/bktr/CHANGELOG.TXT,v 1.21 2006/07/01 10:51:54 markm Exp $ */
/*
* This is part of the Driver for Video Capture Cards (Frame grabbers)
==== //depot/projects/bike_sched/sys/dev/isp/isp.c#2 (text+ko) ====
@@ -34,7 +34,7 @@
*/
#ifdef __FreeBSD__
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.119 2006/04/21 18:46:35 mjacob Exp $");
+__FBSDID("$FreeBSD: src/sys/dev/isp/isp.c,v 1.121 2006/07/03 20:56:48 mjacob Exp $");
#endif
/*
@@ -100,7 +100,7 @@
static const char swrej[] =
"Fabric Nameserver rejected %s (Reason=0x%x Expl=0x%x) for Port ID 0x%x";
static const char finmsg[] =
- "(%d.%d.%d): FIN dl%d resid %d STS 0x%x SKEY %c XS_ERR=0x%x";
+ "%d.%d.%d: FIN dl%d resid %d STS 0x%x SKEY %c XS_ERR=0x%x";
static const char sc0[] =
"%s CHAN %d FTHRSH %d IID %d RESETD %d RETRYC %d RETRYD %d ASD 0x%x";
static const char sc1[] =
@@ -129,7 +129,7 @@
static int isp_getpdb(ispsoftc_t *, int, isp_pdb_t *);
static uint64_t isp_get_portname(ispsoftc_t *, int, int);
static int isp_fclink_test(ispsoftc_t *, int);
-static char *isp2100_fw_statename(int);
+static const char *isp2100_fw_statename(int);
static int isp_pdb_sync(ispsoftc_t *);
static int isp_scan_loop(ispsoftc_t *);
static int isp_fabric_mbox_cmd(ispsoftc_t *, mbreg_t *);
@@ -639,18 +639,20 @@
dodnld = 0;
}
- if (IS_23XX(isp))
+ if (IS_23XX(isp)) {
code_org = ISP_CODE_ORG_2300;
- else
+ } else {
code_org = ISP_CODE_ORG;
+ }
+ if (dodnld) {
+ uint16_t *ptr = isp->isp_mdvec->dv_ispfw;
- if (dodnld) {
- isp->isp_mbxworkp = (void *) &isp->isp_mdvec->dv_ispfw[1];
- isp->isp_mbxwrk0 = isp->isp_mdvec->dv_ispfw[3] - 1;
+ isp->isp_mbxworkp = &ptr[1];
+ isp->isp_mbxwrk0 = ptr[3] - 1;
isp->isp_mbxwrk1 = code_org + 1;
mbs.param[0] = MBOX_WRITE_RAM_WORD;
mbs.param[1] = code_org;
- mbs.param[2] = isp->isp_mdvec->dv_ispfw[0];
+ mbs.param[2] = ptr[0];
isp_mboxcmd(isp, &mbs, MBLOGNONE);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
isp_prt(isp, ISP_LOGERR,
@@ -659,6 +661,7 @@
dodnld = 0;
goto again;
}
>>> TRUNCATED FOR MAIL (1000 lines) <<<
More information about the p4-projects
mailing list