FreeBSD kernel kern code
bus_if.m
Go to the documentation of this file.
1#-
2# Copyright (c) 1998-2004 Doug Rabson
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8# 1. Redistributions of source code must retain the above copyright
9# notice, this list of conditions and the following disclaimer.
10# 2. Redistributions in binary form must reproduce the above copyright
11# notice, this list of conditions and the following disclaimer in the
12# documentation and/or other materials provided with the distribution.
13#
14# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24# SUCH DAMAGE.
25#
26# $FreeBSD$
27#
28
29#include <sys/types.h>
30#include <sys/systm.h>
31#include <sys/bus.h>
32
39INTERFACE bus;
40
41#
42# Default implementations of some methods.
43#
45 static struct resource *
46 null_alloc_resource(device_t dev, device_t child,
47 int type, int *rid, rman_res_t start, rman_res_t end,
48 rman_res_t count, u_int flags)
49 {
50 return (0);
51 }
52
53 static int
54 null_remap_intr(device_t bus, device_t dev, u_int irq)
55 {
56
57 if (dev != NULL)
58 return (BUS_REMAP_INTR(dev, NULL, irq));
59 return (ENXIO);
60 }
61
62 static device_t
63 null_add_child(device_t bus, int order, const char *name,
64 int unit)
65 {
66
67 panic("bus_add_child is not implemented");
68 }
69
70 static int null_reset_post(device_t bus, device_t dev)
71 {
72 return (0);
73 }
74
75 static int null_reset_prepare(device_t bus, device_t dev)
76 {
77 return (0);
78 }
79
80};
81
96METHOD int print_child {
97 device_t _dev;
98 device_t _child;
100
110METHOD void probe_nomatch {
111 device_t _dev;
112 device_t _child;
113};
114
142METHOD int read_ivar {
143 device_t _dev;
144 device_t _child;
146 uintptr_t *_result;
147};
148
166METHOD int write_ivar {
167 device_t _dev;
168 device_t _child;
169 int _indx;
170 uintptr_t _value;
171};
172
182METHOD void child_deleted {
183 device_t _dev;
184 device_t _child;
185};
186
196METHOD void child_detached {
197 device_t _dev;
198 device_t _child;
199};
200
212METHOD void driver_added {
213 device_t _dev;
214 driver_t *_driver;
216
238METHOD device_t add_child {
239 device_t _dev;
240 u_int _order;
241 const char *_name;
242 int _unit;
244
254METHOD int rescan {
255 device_t _dev;
256}
257
286METHOD struct resource * alloc_resource {
287 device_t _dev;
288 device_t _child;
289 int _type;
290 int *_rid;
291 rman_res_t _start;
292 rman_res_t _end;
293 rman_res_t _count;
294 u_int _flags;
296
312 device_t _dev;
313 device_t _child;
314 int _type;
315 int _rid;
316 struct resource *_r;
317};
318
319
334METHOD int map_resource {
335 device_t _dev;
336 device_t _child;
337 int _type;
338 struct resource *_r;
339 struct resource_map_request *_args;
340 struct resource_map *_map;
342
343
357METHOD int unmap_resource {
358 device_t _dev;
359 device_t _child;
360 int _type;
361 struct resource *_r;
362 struct resource_map *_map;
364
365
379 device_t _dev;
380 device_t _child;
381 int _type;
382 int _rid;
383 struct resource *_r;
384};
385
401METHOD int adjust_resource {
402 device_t _dev;
403 device_t _child;
404 int _type;
405 struct resource *_res;
406 rman_res_t _start;
407 rman_res_t _end;
408};
409
423 device_t _dev;
424 int _type;
425 rman_res_t _start;
426 rman_res_t *_newstart;
428
443 device_t _dev;
444 device_t _child;
445 int _type;
446 int _rid;
447 struct resource *_res;
448};
449
473METHOD int setup_intr {
474 device_t _dev;
475 device_t _child;
476 struct resource *_irq;
477 int _flags;
478 driver_filter_t *_filter;
479 driver_intr_t *_intr;
480 void *_arg;
481 void **_cookiep;
482};
483
497METHOD int teardown_intr {
498 device_t _dev;
499 device_t _child;
500 struct resource *_irq;
501 void *_cookie;
502};
503
517METHOD int suspend_intr {
518 device_t _dev;
519 device_t _child;
520 struct resource *_irq;
522
536METHOD int resume_intr {
537 device_t _dev;
538 device_t _child;
539 struct resource *_irq;
541
559METHOD int set_resource {
560 device_t _dev;
561 device_t _child;
562 int _type;
563 int _rid;
564 rman_res_t _start;
565 rman_res_t _count;
566};
567
583METHOD int get_resource {
584 device_t _dev;
585 device_t _child;
586 int _type;
587 int _rid;
588 rman_res_t *_startp;
589 rman_res_t *_countp;
590};
591
603METHOD void delete_resource {
604 device_t _dev;
605 device_t _child;
606 int _type;
607 int _rid;
608};
609
620METHOD struct resource_list * get_resource_list {
621 device_t _dev;
622 device_t _child;
624
640METHOD int child_present {
641 device_t _dev;
642 device_t _child;
644
661METHOD int child_pnpinfo {
662 device_t _dev;
663 device_t _child;
664 struct sbuf *_sb;
666
683METHOD int child_location {
684 device_t _dev;
685 device_t _child;
686 struct sbuf *_sb;
688
698METHOD int bind_intr {
699 device_t _dev;
700 device_t _child;
701 struct resource *_irq;
702 int _cpu;
704
714METHOD int config_intr {
715 device_t _dev;
716 int _irq;
717 enum intr_trigger _trig;
718 enum intr_polarity _pol;
720
732METHOD int describe_intr {
733 device_t _dev;
734 device_t _child;
735 struct resource *_irq;
736 void *_cookie;
737 const char *_descr;
739
756METHOD void hinted_child {
757 device_t _dev;
758 const char *_dname;
760};
761
768METHOD bus_dma_tag_t get_dma_tag {
769 device_t _dev;
770 device_t _child;
772
779METHOD bus_space_tag_t get_bus_tag {
780 device_t _dev;
781 device_t _child;
783
792METHOD void hint_device_unit {
793 device_t _dev;
794 device_t _child;
795 const char *_name;
796 int *_unitp;
797};
798
804METHOD void new_pass {
805 device_t _dev;
807
815METHOD int remap_intr {
816 device_t _dev;
817 device_t _child;
818 u_int _irq;
820
827METHOD int suspend_child {
828 device_t _dev;
829 device_t _child;
831
838METHOD int resume_child {
839 device_t _dev;
840 device_t _child;
842
850METHOD int get_domain {
851 device_t _dev;
852 device_t _child;
855
866METHOD int get_cpus {
867 device_t _dev;
868 device_t _child;
869 enum cpu_sets _op;
870 size_t _setsize;
873
887METHOD int reset_prepare {
888 device_t _dev;
889 device_t _child;
891
901METHOD int reset_post {
902 device_t _dev;
903 device_t _child;
905
913METHOD int reset_child {
914 device_t _dev;
915 device_t _child;
916 int _flags;
917};
918
935METHOD ssize_t get_property {
936 device_t _dev;
937 device_t _child;
938 const char *_propname;
940 size_t _size;
941 device_property_type_t type;
943
956METHOD int get_device_path {
957 device_t _bus;
958 device_t _child;
959 const char *_locator;
960 struct sbuf *_sb;
int * count
Definition: cpufreq_if.m:63
device_property_type_t type
Definition: bus_if.m:941
DEFAULT bus_generic_print_child
Definition: bus_if.m:99
DEFAULT bus_generic_config_intr
Definition: bus_if.m:719
METHOD int child_pnpinfo
Returns the pnp info for this device.
Definition: bus_if.m:661
driver_filter_t * _filter
Definition: bus_if.m:478
METHOD int map_resource
Map a resource.
Definition: bus_if.m:334
METHOD int describe_intr
Allow drivers to associate a description with an active interrupt handler.
Definition: bus_if.m:732
rman_res_t * _countp
Definition: bus_if.m:589
METHOD int release_resource
Release a resource.
Definition: bus_if.m:442
METHOD int get_cpus
Request a set of CPUs.
Definition: bus_if.m:866
DEFAULT null_alloc_resource
Definition: bus_if.m:295
METHOD int write_ivar
Write the value of a bus-specific attribute of a device.
Definition: bus_if.m:166
struct resource * _irq
Definition: bus_if.m:476
METHOD int reset_post
Restores the child operations after the reset.
Definition: bus_if.m:901
DEFAULT bus_generic_get_domain
Definition: bus_if.m:854
METHOD void child_detached
Notify a bus that a child was detached.
Definition: bus_if.m:196
METHOD struct resource_list * get_resource_list
Return a struct resource_list.
Definition: bus_if.m:620
size_t _setsize
Definition: bus_if.m:870
const char * _name
Definition: bus_if.m:241
METHOD void new_pass
Notify a bus that the bus pass level has been changed.
Definition: bus_if.m:804
DEFAULT bus_generic_bind_intr
Definition: bus_if.m:703
METHOD int get_resource
Describe a resource.
Definition: bus_if.m:583
METHOD bus_space_tag_t get_bus_tag
Returns bus_space_tag_t for use w/ devices on the bus.
Definition: bus_if.m:779
int * _rid
Definition: bus_if.m:290
METHOD int resume_intr
Resume an interrupt handler.
Definition: bus_if.m:536
enum intr_polarity _pol
Definition: bus_if.m:718
int _index
Definition: bus_if.m:145
DEFAULT bus_generic_new_pass
Definition: bus_if.m:806
void ** _cookiep
Definition: bus_if.m:481
uintptr_t * _result
Definition: bus_if.m:146
DEFAULT bus_generic_resume_intr
Definition: bus_if.m:540
DEFAULT null_reset_prepare
Definition: bus_if.m:890
int _cpu
Definition: bus_if.m:702
enum intr_trigger _trig
Definition: bus_if.m:717
size_t _size
Definition: bus_if.m:940
DEFAULT bus_generic_describe_intr
Definition: bus_if.m:738
METHOD int activate_resource
Activate a resource.
Definition: bus_if.m:311
const char * _descr
Definition: bus_if.m:737
DEFAULT bus_generic_map_resource
Definition: bus_if.m:341
METHOD int child_present
Is the hardware described by _child still attached to the system?
Definition: bus_if.m:640
int _type
Definition: bus_if.m:289
METHOD int print_child
Print a description of a child device.
Definition: bus_if.m:96
int * _unitp
Definition: bus_if.m:796
DEFAULT bus_generic_get_bus_tag
Definition: bus_if.m:782
METHOD int reset_child
Performs reset of the child.
Definition: bus_if.m:913
int _indx
Definition: bus_if.m:169
METHOD int setup_intr
Install an interrupt handler.
Definition: bus_if.m:473
DEFAULT bus_generic_driver_added
Definition: bus_if.m:215
METHOD void hinted_child
Notify a (bus) driver about a child that the hints mechanism believes it has discovered.
Definition: bus_if.m:756
DEFAULT bus_generic_get_dma_tag
Definition: bus_if.m:771
struct resource * _r
Definition: bus_if.m:316
DEFAULT bus_generic_child_pnpinfo
Definition: bus_if.m:665
enum cpu_sets _op
Definition: bus_if.m:869
METHOD int child_location
Returns the location for this device.
Definition: bus_if.m:683
u_int _order
Definition: bus_if.m:240
METHOD int translate_resource
translate a resource value
Definition: bus_if.m:422
DEFAULT null_reset_post
Definition: bus_if.m:904
METHOD int rescan
Rescan the bus.
Definition: bus_if.m:254
METHOD void probe_nomatch
Print a notification about an unprobed child device.
Definition: bus_if.m:110
rman_res_t _count
Definition: bus_if.m:293
METHOD int unmap_resource
Unmap a resource.
Definition: bus_if.m:357
DEFAULT null_add_child
Definition: bus_if.m:243
METHOD int bind_intr
Allow drivers to request that an interrupt be bound to a specific CPU.
Definition: bus_if.m:698
METHOD bus_dma_tag_t get_dma_tag
Returns bus_dma_tag_t for use w/ devices on the bus.
Definition: bus_if.m:768
METHOD int read_ivar
Read the value of a bus-specific attribute of a device.
Definition: bus_if.m:142
METHOD int deactivate_resource
Deactivate a resource.
Definition: bus_if.m:378
int _unit
Definition: bus_if.m:242
DEFAULT bus_generic_child_location
Definition: bus_if.m:687
METHOD struct resource * alloc_resource
Allocate a system resource.
Definition: bus_if.m:286
driver_intr_t * _intr
Definition: bus_if.m:479
void * _arg
Definition: bus_if.m:480
rman_res_t _start
Definition: bus_if.m:291
struct resource_map_request * _args
Definition: bus_if.m:339
const char * _propname
Definition: bus_if.m:938
DEFAULT bus_generic_get_device_path
Definition: bus_if.m:961
METHOD int adjust_resource
Adjust a resource.
Definition: bus_if.m:401
METHOD int suspend_intr
Suspend an interrupt handler.
Definition: bus_if.m:517
struct resource_map * _map
Definition: bus_if.m:340
u_int _flags
Definition: bus_if.m:294
rman_res_t * _startp
Definition: bus_if.m:588
METHOD int resume_child
Resume a given child.
Definition: bus_if.m:838
METHOD void hint_device_unit
Allow the bus to determine the unit number of a device.
Definition: bus_if.m:792
void * _cookie
Definition: bus_if.m:501
DEFAULT bus_generic_get_property
Definition: bus_if.m:942
CODE
Definition: bus_if.m:44
struct sbuf * _sb
Definition: bus_if.m:664
DEFAULT bus_generic_get_resource_list
Definition: bus_if.m:623
DEFAULT bus_generic_get_cpus
Definition: bus_if.m:872
METHOD void driver_added
Notify a bus that a new driver was added.
Definition: bus_if.m:212
METHOD void child_deleted
Notify a bus that a child was deleted.
Definition: bus_if.m:182
METHOD int suspend_child
Suspend a given child.
Definition: bus_if.m:827
uintptr_t _value
Definition: bus_if.m:170
int * _domain
Definition: bus_if.m:853
METHOD int reset_prepare
Prepares the given child of the bus for reset.
Definition: bus_if.m:887
struct _cpuset * _cpuset
Definition: bus_if.m:871
device_t _child
Definition: bus_if.m:98
DEFAULT bus_generic_resume_child
Definition: bus_if.m:841
METHOD int get_device_path
Gets a child's full path to the device.
Definition: bus_if.m:956
DEFAULT null_remap_intr
Definition: bus_if.m:819
driver_t * _driver
Definition: bus_if.m:214
const char * _dname
Definition: bus_if.m:758
void * _propvalue
Definition: bus_if.m:939
DEFAULT bus_generic_suspend_intr
Definition: bus_if.m:521
DEFAULT bus_generic_child_present
Definition: bus_if.m:643
struct resource * _res
Definition: bus_if.m:405
const char * _locator
Definition: bus_if.m:959
METHOD ssize_t get_property
Gets child's specific property.
Definition: bus_if.m:935
DEFAULT bus_generic_unmap_resource
Definition: bus_if.m:363
int _dunit
Definition: bus_if.m:759
METHOD int teardown_intr
Uninstall an interrupt handler.
Definition: bus_if.m:497
rman_res_t * _newstart
Definition: bus_if.m:426
METHOD int remap_intr
Notify a bus that specified child's IRQ should be remapped.
Definition: bus_if.m:815
METHOD device_t add_child
Create a new child device.
Definition: bus_if.m:238
DEFAULT bus_generic_translate_resource
Definition: bus_if.m:427
INTERFACE bus
Definition: bus_if.m:39
METHOD int config_intr
Allow (bus) drivers to specify the trigger mode and polarity of the specified interrupt.
Definition: bus_if.m:714
rman_res_t _end
Definition: bus_if.m:292
DEFAULT bus_generic_suspend_child
Definition: bus_if.m:830
METHOD int get_domain
Get the VM domain handle for the given bus and child.
Definition: bus_if.m:850
METHOD int set_resource
Define a resource which can be allocated with BUS_ALLOC_RESOURCE().
Definition: bus_if.m:559
METHOD void delete_resource
Delete a resource.
Definition: bus_if.m:603
const char * name
Definition: kern_fail.c:145
void panic(const char *fmt,...)
void *** start
Definition: linker_if.m:98
device_t child
Definition: msi_if.m:58
uint16_t flags
Definition: subr_stats.c:2
#define DEFAULT(foo, bar)