Changeset 4d2dba7 in mainline for kernel/genarch/src
- Timestamp:
- 2013-10-15T17:05:26Z (12 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f988a13
- Parents:
- a73ebf0
- Location:
- kernel/genarch/src/drivers
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/genarch/src/drivers/grlib_irqmp/grlib_irqmp.c
ra73ebf0 r4d2dba7 38 38 #include <arch/asm.h> 39 39 40 void grlib_irqmp_init(grlib_irqmp_t *irqc, grlib_irqmp_regs_t *regs) 40 #include <mm/km.h> 41 42 void grlib_irqmp_init(grlib_irqmp_t *irqc, bootinfo_t *bootinfo) 41 43 { 42 irqc->regs = regs; 44 irqc->regs = (void *) km_map(bootinfo->intc_base, PAGE_SIZE, 45 PAGE_NOT_CACHEABLE); 46 47 /* Mask all interrupts */ 48 pio_write_32((void *)&irqc->regs + GRLIB_IRQMP_MASK_OFFSET, 0); 43 49 } 44 50 45 unsignedgrlib_irqmp_inum_get(grlib_irqmp_t *irqc)51 int grlib_irqmp_inum_get(grlib_irqmp_t *irqc) 46 52 { 47 return 0; 53 int i; 54 uint32_t pending = pio_read_32(&irqc->regs->pending); 55 56 for (i = 1; i < 16; i++) { 57 if (pending & (1 << i)) 58 return i; 59 } 60 61 return -1; 48 62 } 49 63 50 void grlib_irqmp_clear(grlib_irqmp_t *irqc, unsignedinum)64 void grlib_irqmp_clear(grlib_irqmp_t *irqc, int inum) 51 65 { 66 pio_write_32(&irqc->regs->clear, (1 << inum)); 52 67 } 53 68 54 void grlib_irqmp_ src_enable(grlib_irqmp_t *irqc, unsignedsrc)69 void grlib_irqmp_mask(grlib_irqmp_t *irqc, int src) 55 70 { 71 uint32_t mask = pio_read_32((void *)&irqc->regs + GRLIB_IRQMP_MASK_OFFSET); 72 73 mask &= ~(1 << src); 74 75 pio_write_32((void *)&irqc->regs + GRLIB_IRQMP_MASK_OFFSET, mask); 56 76 } 57 77 58 void grlib_irqmp_ src_disable(grlib_irqmp_t *irqc, unsignedsrc)78 void grlib_irqmp_unmask(grlib_irqmp_t *irqc, int src) 59 79 { 80 uint32_t mask = pio_read_32((void *)&irqc->regs + GRLIB_IRQMP_MASK_OFFSET); 81 82 mask |= (1 << src); 83 84 pio_write_32((void *)&irqc->regs + GRLIB_IRQMP_MASK_OFFSET, mask); 60 85 } 61 86 -
kernel/genarch/src/drivers/grlib_uart/grlib_uart.c
ra73ebf0 r4d2dba7 50 50 static void grlib_uart_sendb(outdev_t *dev, uint8_t byte) 51 51 { 52 uint32_t reg; 52 53 grlib_uart_status_t *status; 53 54 grlib_uart_t *uart = … … 56 57 /* Wait for space becoming available in Tx FIFO. */ 57 58 do { 58 status = pio_read_32(&uart->io->status); 59 reg = pio_read_32(&uart->io->status); 60 status = (grlib_uart_status_t *)® 59 61 } while (status->tf != 0); 60 62 … … 85 87 static void grlib_uart_irq_handler(irq_t *irq) 86 88 { 89 uint32_t reg; 87 90 grlib_uart_t *uart = irq->instance; 88 grlib_ status_tstatus;91 grlib_uart_status_t *status; 89 92 90 status = (grlib_status_t)pio_read_32(&uart->io->status); 93 reg = pio_read_32(&uart->io->status); 94 status = (grlib_uart_status_t *)® 91 95 92 96 while (status->dr != 0) { 93 97 uint32_t data = pio_read_32(&uart->io->data); 94 status = (grlib_status_t)pio_read_32(&uart->io->status); 98 reg = pio_read_32(&uart->io->status); 99 status = (grlib_uart_status_t *)® 95 100 indev_push_character(uart->indev, data & 0xff); 96 101 } … … 131 136 132 137 /* Enable FIFO, Tx trigger level: empty, Rx trigger level: 1 byte. */ 133 grlib_ control_t control =138 grlib_uart_control_t control = 134 139 { .fa = 1, .rf = 1, .tf = 1, .ri = 1, 135 140 .te = 1, .re = 1}; 136 141 137 pio_write_32(&uart->io->control, control); 142 uint32_t *reg = (uint32_t *)&control; 143 pio_write_32(&uart->io->control, *reg); 138 144 139 145 link_initialize(&uart->parea.link);
Note:
See TracChangeset
for help on using the changeset viewer.