Changes in trunk/kernel/devices/dev_pic.c [3:1]
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/devices/dev_pic.c
r3 r1 25 25 #include <hal_special.h> 26 26 #include <dev_icu.h> 27 #include < chdev.h>27 #include <device.h> 28 28 #include <memcpy.h> 29 29 #include <printk.h> … … 35 35 ///////////////////////////////////////////////////////////////////////////////////////// 36 36 37 extern chdev_directory_t chdev_dir; // allocated in kernel_init.c37 extern devices_directory_t devices_dir; // allocated in kernel_init.c 38 38 39 extern chdev_pic_input_t chdev_pic_input; // allocated in kernel_init.c 39 extern devices_input_irq_t devices_input_irq; // allocated in kernel_init.c 40 41 40 42 41 43 /////////////////////////////////// 42 void dev_pic_init( chdev_t * chdev,43 uint32_t 44 void dev_pic_init( xptr_t dev_xp, 45 uint32_t irq_nr ) 44 46 { 45 // set PIC chdev extension field 46 chdev->ext.pic.irq_nr = irq_nr; 47 // get PIC device cluster and local pointer 48 cxy_t dev_cxy = GET_CXY( dev_xp ); 49 device_t * dev_ptr = (device_t *)GET_PTR( dev_xp ); 47 50 48 // get implementation49 uint32_t impl = chdev->impl;51 // set PIC device extension field 52 dev_ptr->ext.pic.irq_nr = irq_nr; 50 53 51 // call the relevant driver init function 54 // get implementation index from PIC device descriptor 55 uint32_t impl = hal_remote_lw( XPTR( dev_cxy , &dev_ptr->impl ) ); 56 57 // set the "name" field in PIC device descriptor 58 // and call the relevant driver init function 52 59 if( impl == IMPL_PIC_SOC ) 53 60 { 54 soclib_pic_init( chdev ); 61 memcpy( dev_ptr->name , "PIC_TSR" , 16 ); 62 soclib_pic_init( dev_xp ); 55 63 } 56 64 else 57 65 { 58 assert( false , __FUNCTION__ , "illegal PIC device implementation" ); 66 printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ ); 67 hal_core_sleep(); 59 68 } 60 69 } // end dev_pic_init() … … 66 75 { 67 76 // get extended pointer on WTI mailbox 68 xptr_t wti_xp = XPTR( cxy , dev_icu_wti_ptr( wti_id ));77 xptr_t wti_xp = dev_icu_wti_xptr( cxy , wti_id ); 69 78 70 // get extended pointer on PIC chdevfrom directory71 xptr_t dev_xp = chdev_dir.pic;79 // get extended pointer on PIC device from directory 80 xptr_t dev_xp = devices_dir.pic; 72 81 73 // get PIC chdevcluster and local pointer74 cxy_t dev_cxy = GET_CXY( dev_xp );75 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );82 // get PIC device cluster and local pointer 83 cxy_t dev_cxy = GET_CXY( dev_xp ); 84 device_t * dev_ptr = (device_t *)GET_PTR( dev_xp ); 76 85 77 86 // get implementation index and segment base … … 83 92 soclib_pic_bind_irq( dev_xp , irq_id , wti_xp ); 84 93 } 94 else 95 { 96 printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ ); 97 hal_core_sleep(); 98 } 85 99 } // end dev_pic_link_wti() 86 100 … … 88 102 void dev_pic_unbind_irq( uint32_t irq_id ) 89 103 { 90 // get extended pointer on PIC chdevfrom directory91 xptr_t dev_xp = chdev_dir.pic;104 // get extended pointer on PIC device from directory 105 xptr_t dev_xp = devices_dir.pic; 92 106 93 // get PIC chdevcluster and local pointer94 cxy_t dev_cxy = GET_CXY( dev_xp );95 chdev_t * dev_ptr = (chdev_t *)GET_PTR( dev_xp );107 // get PIC device cluster and local pointer 108 cxy_t dev_cxy = GET_CXY( dev_xp ); 109 device_t * dev_ptr = (device_t *)GET_PTR( dev_xp ); 96 110 97 111 // get implementation index … … 103 117 soclib_pic_unbind_irq( dev_xp , irq_id ); 104 118 } 119 else 120 { 121 printk("PANIC in %s: illegal PIC device implementation\n", __FUNCTION__ ); 122 hal_core_sleep(); 123 } 124 105 125 } // end dev_pic_disable_irq() 106 126
Note: See TracChangeset
for help on using the changeset viewer.