Changeset 76 for trunk/hal/x86_64/drivers/soclib_pic.c
- Timestamp:
- Jun 27, 2017, 2:07:55 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/x86_64/drivers/soclib_pic.c
r75 r76 30 30 #include <vfs.h> 31 31 32 33 ////////////////////////////////////////34 32 void soclib_pic_init( chdev_t * chdev ) 35 33 { 36 // get PIC controller segment cluster and local pointer37 cxy_t seg_cxy = (cxy_t)GET_CXY( chdev->base );38 uint32_t * seg_ptr = (uint32_t *)GET_PTR( chdev->base );39 uint32_t i;40 34 41 // reset the MASK registers for all input IRQs42 for( i = 0 ; i < CONFIG_MAX_IRQS_PER_PIC ; i++ )43 {44 hal_remote_sw( XPTR( seg_cxy , seg_ptr + i*IOPIC_SPAN + IOPIC_MASK ) , 0 );45 }46 35 } 47 36 48 ////////////////////////////////////////////49 37 void soclib_pic_bind_irq( xptr_t dev_xp, 50 38 uint32_t irq_id, 51 39 xptr_t xp_wti ) 52 40 { 53 // get PIC device descriptor cluster and local pointer54 cxy_t dev_cxy = GET_CXY( dev_xp );55 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );56 57 // get extended pointer on PIC segment base from PIC device descriptor58 xptr_t seg_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) );59 60 // get PIC controller segment cluster and local pointer61 cxy_t seg_cxy = (cxy_t)GET_CXY( seg_xp);62 uint32_t * seg_ptr = (uint32_t *)GET_PTR( seg_xp );63 41 64 uint32_t lsb = (uint32_t)xp_wti;65 uint32_t msb = (uint32_t)(xp_wti>>32);66 67 // set the IOPIC_ADDRESS and IOPIC_EXTEND registers68 hal_remote_sw( XPTR( seg_cxy , seg_ptr+irq_id*IOPIC_SPAN+IOPIC_ADDRESS ) , lsb );69 hal_remote_sw( XPTR( seg_cxy , seg_ptr+irq_id*IOPIC_SPAN+IOPIC_EXTEND ) , msb );70 71 // set IOPIC_MASK register72 hal_remote_sw( XPTR( seg_cxy , seg_ptr+irq_id*IOPIC_SPAN+IOPIC_MASK ) , 1 );73 42 } 74 43 75 //////////////////////////////////////////////76 44 void soclib_pic_unbind_irq( xptr_t dev_xp, 77 45 uint32_t irq_id ) 78 46 { 79 // get PIC device descriptor cluster and local pointer80 cxy_t dev_cxy = GET_CXY( dev_xp );81 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );82 83 // get extended pointer on PIC segment base from PIC device descriptor84 xptr_t seg_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) );85 86 // get PIC controller segment cluster and local pointer87 cxy_t seg_cxy = (cxy_t)GET_CXY( seg_xp);88 uint32_t * seg_ptr = (uint32_t *)GET_PTR( seg_xp );89 47 90 // set IOPIC_MASK register91 hal_remote_sw( XPTR( seg_cxy , seg_ptr+irq_id*IOPIC_SPAN+IOPIC_MASK ) , 0 );92 48 } 93 49 94 //////////////////////////////////////////////95 50 void soclib_pic_get_status( xptr_t dev_xp, 96 51 uint32_t irq_id, 97 52 uint32_t * status) 98 53 { 99 // get PIC device descriptor cluster and local pointer100 cxy_t dev_cxy = GET_CXY( dev_xp );101 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );102 103 // get extended pointer on PIC segment base from PIC device descriptor104 xptr_t seg_xp = (xptr_t)hal_remote_lwd( XPTR( dev_cxy , &dev_ptr->base ) );105 106 // get PIC controller segment cluster and local pointer107 cxy_t seg_cxy = (cxy_t)GET_CXY( seg_xp);108 uint32_t * seg_ptr = (uint32_t *)GET_PTR( seg_xp );109 54 110 // return status111 *status = hal_remote_lw( XPTR( seg_cxy , seg_ptr+irq_id*IOPIC_SPAN+IOPIC_STATUS ) );112 55 } 113 56
Note: See TracChangeset
for help on using the changeset viewer.