• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is produced automatically.
3  * Do not modify anything in here by hand.
4  *
5  * Created from source file
6  *   bus_if.m
7  * with
8  *   makeobjops.awk
9  *
10  * See the source file for legal information
11  */
12 
13 /**
14  * @defgroup BUS bus - KObj methods for drivers of devices with children
15  * @brief A set of methods required device drivers that support
16  * child devices.
17  * @{
18  */
19 
20 #ifndef _bus_if_h_
21 #define _bus_if_h_
22 
23 /** @brief Unique descriptor for the BUS_ALLOC_RESOURCE() method */
24 extern struct kobjop_desc bus_alloc_resource_desc;
25 /** @brief A function implementing the BUS_ALLOC_RESOURCE() method */
26 typedef struct resource * bus_alloc_resource_t(device_t _dev, device_t _child,
27                                                int _type, int *_rid,
28                                                rman_res_t _start,
29                                                rman_res_t _end,
30                                                rman_res_t _count, u_int _flags);
31 /**
32  * @brief Allocate a system resource
33  *
34  * This method is called by child devices of a bus to allocate resources.
35  * The types are defined in <machine/resource.h>; the meaning of the
36  * resource-ID field varies from bus to bus (but @p *rid == 0 is always
37  * valid if the resource type is). If a resource was allocated and the
38  * caller did not use the RF_ACTIVE to specify that it should be
39  * activated immediately, the caller is responsible for calling
40  * BUS_ACTIVATE_RESOURCE() when it actually uses the resource.
41  *
42  * @param _dev		the parent device of @p _child
43  * @param _child	the device which is requesting an allocation
44  * @param _type		the type of resource to allocate
45  * @param _rid		a pointer to the resource identifier
46  * @param _start	hint at the start of the resource range - pass
47  *			@c 0 for any start address
48  * @param _end		hint at the end of the resource range - pass
49  *			@c ~0 for any end address
50  * @param _count	hint at the size of range required - pass @c 1
51  *			for any size
52  * @param _flags	any extra flags to control the resource
53  *			allocation - see @c RF_XXX flags in
54  *			<sys/rman.h> for details
55  *
56  * @returns		the resource which was allocated or @c NULL if no
57  *			resource could be allocated
58  */
59 
BUS_ALLOC_RESOURCE(device_t _dev,device_t _child,int _type,int * _rid,rman_res_t _start,rman_res_t _end,rman_res_t _count,u_int _flags)60 static __inline struct resource * BUS_ALLOC_RESOURCE(device_t _dev,
61                                                      device_t _child, int _type,
62                                                      int *_rid,
63                                                      rman_res_t _start,
64                                                      rman_res_t _end,
65                                                      rman_res_t _count,
66                                                      u_int _flags)
67 {
68 	kobjop_t _m;
69 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_alloc_resource);
70 	return ((bus_alloc_resource_t *) _m)(_dev, _child, _type, _rid, _start, _end, _count, _flags);
71 }
72 /** @brief Unique descriptor for the BUS_CHILD_PNPINFO_STR() method */
73 extern struct kobjop_desc bus_child_pnpinfo_str_desc;
74 /** @brief A function implementing the BUS_CHILD_PNPINFO_STR() method */
75 typedef int bus_child_pnpinfo_str_t(device_t _dev, device_t _child, char *_buf,
76                                     size_t _buflen);
77 
78 /**
79  * @brief Returns the pnp info for this device.
80  *
81  * Return it as a string.  If the storage is insufficient for the
82  * string, then return EOVERFLOW.
83  *
84  * The string must be formatted as a space-separated list of
85  * name=value pairs.  Names may only contain alphanumeric characters,
86  * underscores ('_') and hyphens ('-').  Values can contain any
87  * non-whitespace characters.  Values containing whitespace can be
88  * quoted with double quotes ('"').  Double quotes and backslashes in
89  * quoted values can be escaped with backslashes ('\').
90  *
91  * @param _dev		the parent device of @p _child
92  * @param _child	the device which is being examined
93  * @param _buf		the address of a buffer to receive the pnp
94  *			string
95  * @param _buflen	the size of the buffer pointed to by @p _buf
96  */
97 
BUS_CHILD_PNPINFO_STR(device_t _dev,device_t _child,char * _buf,size_t _buflen)98 static __inline int BUS_CHILD_PNPINFO_STR(device_t _dev, device_t _child,
99                                           char *_buf, size_t _buflen)
100 {
101 	kobjop_t _m;
102 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_child_pnpinfo_str);
103 	return ((bus_child_pnpinfo_str_t *) _m)(_dev, _child, _buf, _buflen);
104 }
105 
106 /** @brief Unique descriptor for the BUS_CHILD_LOCATION_STR() method */
107 extern struct kobjop_desc bus_child_location_str_desc;
108 /** @brief A function implementing the BUS_CHILD_LOCATION_STR() method */
109 typedef int bus_child_location_str_t(device_t _dev, device_t _child, char *_buf,
110                                      size_t _buflen);
111 /**
112  * @brief Returns the location for this device.
113  *
114  * Return it as a string.  If the storage is insufficient for the
115  * string, then return EOVERFLOW.
116  *
117  * The string must be formatted as a space-separated list of
118  * name=value pairs.  Names may only contain alphanumeric characters,
119  * underscores ('_') and hyphens ('-').  Values can contain any
120  * non-whitespace characters.  Values containing whitespace can be
121  * quoted with double quotes ('"').  Double quotes and backslashes in
122  * quoted values can be escaped with backslashes ('\').
123  *
124  * @param _dev		the parent device of @p _child
125  * @param _child	the device which is being examined
126  * @param _buf		the address of a buffer to receive the location
127  *			string
128  * @param _buflen	the size of the buffer pointed to by @p _buf
129  */
130 
BUS_CHILD_LOCATION_STR(device_t _dev,device_t _child,char * _buf,size_t _buflen)131 static __inline int BUS_CHILD_LOCATION_STR(device_t _dev, device_t _child,
132                                            char *_buf, size_t _buflen)
133 {
134 	kobjop_t _m;
135 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_child_location_str);
136 	return ((bus_child_location_str_t *) _m)(_dev, _child, _buf, _buflen);
137 }
138 
139 /** @brief Unique descriptor for the BUS_PRINT_CHILD() method */
140 extern struct kobjop_desc bus_print_child_desc;
141 /** @brief A function implementing the BUS_PRINT_CHILD() method */
142 typedef int bus_print_child_t(device_t _dev, device_t _child);
143 
144 /**
145  * @brief Print a description of a child device
146  *
147  * This is called from system code which prints out a description of a
148  * device. It should describe the attachment that the child has with
149  * the parent. For instance the TurboLaser bus prints which node the
150  * device is attached to. See bus_generic_print_child() for more
151  * information.
152  *
153  * @param _dev		the device whose child is being printed
154  * @param _child	the child device to describe
155  *
156  * @returns		the number of characters output.
157  */
158 
BUS_PRINT_CHILD(device_t _dev,device_t _child)159 static __inline int BUS_PRINT_CHILD(device_t _dev, device_t _child)
160 {
161 	kobjop_t _m;
162 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_print_child);
163 	return ((bus_print_child_t *) _m)(_dev, _child);
164 }
165 
166 /** @brief Unique descriptor for the BUS_PROBE_NOMATCH() method */
167 extern struct kobjop_desc bus_probe_nomatch_desc;
168 /** @brief A function implementing the BUS_PROBE_NOMATCH() method */
169 typedef void bus_probe_nomatch_t(device_t _dev, device_t _child);
170 /**
171  * @brief Print a notification about an unprobed child device.
172  *
173  * Called for each child device that did not succeed in probing for a
174  * driver.
175  *
176  * @param _dev		the device whose child was being probed
177  * @param _child	the child device which failed to probe
178  */
179 
BUS_PROBE_NOMATCH(device_t _dev,device_t _child)180 static __inline void BUS_PROBE_NOMATCH(device_t _dev, device_t _child)
181 {
182 	kobjop_t _m;
183 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_probe_nomatch);
184 	((bus_probe_nomatch_t *) _m)(_dev, _child);
185 }
186 
187 /** @brief Unique descriptor for the BUS_READ_IVAR() method */
188 extern struct kobjop_desc bus_read_ivar_desc;
189 /** @brief A function implementing the BUS_READ_IVAR() method */
190 typedef int bus_read_ivar_t(device_t _dev, device_t _child, int _index,
191                             uintptr_t *_result);
192 /**
193  * @brief Read the value of a bus-specific attribute of a device
194  *
195  * This method, along with BUS_WRITE_IVAR() manages a bus-specific set
196  * of instance variables of a child device.  The intention is that
197  * each different type of bus defines a set of appropriate instance
198  * variables (such as ports and irqs for ISA bus etc.)
199  *
200  * This information could be given to the child device as a struct but
201  * that makes it hard for a bus to add or remove variables without
202  * forcing an edit and recompile for all drivers which may not be
203  * possible for vendor supplied binary drivers.
204  *
205  * This method copies the value of an instance variable to the
206  * location specified by @p *_result.
207  *
208  * @param _dev		the device whose child was being examined
209  * @param _child	the child device whose instance variable is
210  *			being read
211  * @param _index	the instance variable to read
212  * @param _result	a location to receive the instance variable
213  *			value
214  *
215  * @retval 0		success
216  * @retval ENOENT	no such instance variable is supported by @p
217  *			_dev
218  */
219 
BUS_READ_IVAR(device_t _dev,device_t _child,int _index,uintptr_t * _result)220 static __inline int BUS_READ_IVAR(device_t _dev, device_t _child, int _index,
221                                   uintptr_t *_result)
222 {
223 	kobjop_t _m;
224 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_read_ivar);
225 	return ((bus_read_ivar_t *) _m)(_dev, _child, _index, _result);
226 }
227 
228 /** @brief Unique descriptor for the BUS_WRITE_IVAR() method */
229 extern struct kobjop_desc bus_write_ivar_desc;
230 /** @brief A function implementing the BUS_WRITE_IVAR() method */
231 typedef int bus_write_ivar_t(device_t _dev, device_t _child, int _indx,
232                              uintptr_t _value);
233 /**
234  * @brief Write the value of a bus-specific attribute of a device
235  *
236  * This method sets the value of an instance variable to @p _value.
237  *
238  * @param _dev		the device whose child was being updated
239  * @param _child	the child device whose instance variable is
240  *			being written
241  * @param _index	the instance variable to write
242  * @param _value	the value to write to that instance variable
243  *
244  * @retval 0		success
245  * @retval ENOENT	no such instance variable is supported by @p
246  *			_dev
247  * @retval EINVAL	the instance variable was recognised but
248  *			contains a read-only value
249  */
250 
BUS_WRITE_IVAR(device_t _dev,device_t _child,int _indx,uintptr_t _value)251 static __inline int BUS_WRITE_IVAR(device_t _dev, device_t _child, int _indx,
252                                    uintptr_t _value)
253 {
254 	kobjop_t _m;
255 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_write_ivar);
256 	return ((bus_write_ivar_t *) _m)(_dev, _child, _indx, _value);
257 }
258 
259 /** @brief Unique descriptor for the BUS_CHILD_DELETED() method */
260 extern struct kobjop_desc bus_child_deleted_desc;
261 /** @brief A function implementing the BUS_CHILD_DELETED() method */
262 typedef void bus_child_deleted_t(device_t _dev, device_t _child);
263 /**
264  * @brief Notify a bus that a child was deleted
265  *
266  * Called at the beginning of device_delete_child() to allow the parent
267  * to teardown any bus-specific state for the child.
268  *
269  * @param _dev		the device whose child is being deleted
270  * @param _child	the child device which is being deleted
271  */
272 
BUS_CHILD_DELETED(device_t _dev,device_t _child)273 static __inline void BUS_CHILD_DELETED(device_t _dev, device_t _child)
274 {
275 	kobjop_t _m;
276 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_child_deleted);
277 	((bus_child_deleted_t *) _m)(_dev, _child);
278 }
279 
280 /** @brief Unique descriptor for the BUS_CHILD_DETACHED() method */
281 extern struct kobjop_desc bus_child_detached_desc;
282 /** @brief A function implementing the BUS_CHILD_DETACHED() method */
283 typedef void bus_child_detached_t(device_t _dev, device_t _child);
284 /**
285  * @brief Notify a bus that a child was detached
286  *
287  * Called after the child's DEVICE_DETACH() method to allow the parent
288  * to reclaim any resources allocated on behalf of the child.
289  *
290  * @param _dev		the device whose child changed state
291  * @param _child	the child device which changed state
292  */
293 
BUS_CHILD_DETACHED(device_t _dev,device_t _child)294 static __inline void BUS_CHILD_DETACHED(device_t _dev, device_t _child)
295 {
296 	kobjop_t _m;
297 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_child_detached);
298 	((bus_child_detached_t *) _m)(_dev, _child);
299 }
300 
301 /** @brief Unique descriptor for the BUS_DRIVER_ADDED() method */
302 extern struct kobjop_desc bus_driver_added_desc;
303 /** @brief A function implementing the BUS_DRIVER_ADDED() method */
304 typedef void bus_driver_added_t(device_t _dev, driver_t *_driver);
305 /**
306  * @brief Notify a bus that a new driver was added
307  *
308  * Called when a new driver is added to the devclass which owns this
309  * bus. The generic implementation of this method attempts to probe and
310  * attach any un-matched children of the bus.
311  *
312  * @param _dev		the device whose devclass had a new driver
313  *			added to it
314  * @param _driver	the new driver which was added
315  */
316 
BUS_DRIVER_ADDED(device_t _dev,driver_t * _driver)317 static __inline void BUS_DRIVER_ADDED(device_t _dev, driver_t *_driver)
318 {
319 	kobjop_t _m;
320 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_driver_added);
321 	((bus_driver_added_t *) _m)(_dev, _driver);
322 }
323 
324 /** @brief Unique descriptor for the BUS_ADD_CHILD() method */
325 extern struct kobjop_desc bus_add_child_desc;
326 /** @brief A function implementing the BUS_ADD_CHILD() method */
327 typedef device_t bus_add_child_t(device_t _dev, u_int _order, const char *_name,
328                                  int _unit);
329 /**
330  * @brief Create a new child device
331  *
332  * For busses which use use drivers supporting DEVICE_IDENTIFY() to
333  * enumerate their devices, this method is used to create new
334  * device instances. The new device will be added after the last
335  * existing child with the same order. Implementations of bus_add_child
336  * call device_add_child_ordered to add the child and often add
337  * a suitable ivar to the device specific to that bus.
338  *
339  * @param _dev		the bus device which will be the parent of the
340  *			new child device
341  * @param _order	a value which is used to partially sort the
342  *			children of @p _dev - devices created using
343  *			lower values of @p _order appear first in @p
344  *			_dev's list of children
345  * @param _name		devclass name for new device or @c NULL if not
346  *			specified
347  * @param _unit		unit number for new device or @c -1 if not
348  *			specified
349  */
350 
BUS_ADD_CHILD(device_t _dev,u_int _order,const char * _name,int _unit)351 static __inline device_t BUS_ADD_CHILD(device_t _dev, u_int _order,
352                                        const char *_name, int _unit)
353 {
354 	kobjop_t _m;
355 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_add_child);
356 	return ((bus_add_child_t *) _m)(_dev, _order, _name, _unit);
357 }
358 
359 /** @brief Unique descriptor for the BUS_RESCAN() method */
360 extern struct kobjop_desc bus_rescan_desc;
361 /** @brief A function implementing the BUS_RESCAN() method */
362 typedef int bus_rescan_t(device_t _dev);
363 /**
364  * @brief Rescan the bus
365  *
366  * This method is called by a parent bridge or devctl to trigger a bus
367  * rescan.  The rescan should delete devices no longer present and
368  * enumerate devices that have newly arrived.
369  *
370  * @param _dev		the bus device
371  */
372 
BUS_RESCAN(device_t _dev)373 static __inline int BUS_RESCAN(device_t _dev)
374 {
375 	kobjop_t _m;
376 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_rescan);
377 	return ((bus_rescan_t *) _m)(_dev);
378 }
379 
380 /** @brief Unique descriptor for the BUS_CHILD_PRESENT() method */
381 extern struct kobjop_desc bus_child_present_desc;
382 /** @brief A function implementing the BUS_CHILD_PRESENT() method */
383 typedef int bus_child_present_t(device_t _dev, device_t _child);
384 /**
385  * @brief Is the hardware described by @p _child still attached to the
386  * system?
387  *
388  * This method should return 0 if the device is not present.  It
389  * should return -1 if it is present.  Any errors in determining
390  * should be returned as a normal errno value.  Client drivers are to
391  * assume that the device is present, even if there is an error
392  * determining if it is there.  Busses are to try to avoid returning
393  * errors, but newcard will return an error if the device fails to
394  * implement this method.
395  *
396  * @param _dev          the parent device of @p _child
397  * @param _child        the device which is being examined
398  */
399 
BUS_CHILD_PRESENT(device_t _dev,device_t _child)400 static __inline int BUS_CHILD_PRESENT(device_t _dev, device_t _child)
401 {
402         kobjop_t _m;
403         KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_child_present);
404         return ((bus_child_present_t *) _m)(_dev, _child);
405 }
406 
407 // delete resource and interrupt
408 
409 /** @brief Unique descriptor for the BUS_HINTED_CHILD() method */
410 extern struct kobjop_desc bus_hinted_child_desc;
411 /** @brief A function implementing the BUS_HINTED_CHILD() method */
412 typedef void bus_hinted_child_t(device_t _dev, const char *_dname, int _dunit);
413 /**
414  * @brief Notify a (bus) driver about a child that the hints mechanism
415  * believes it has discovered.
416  *
417  * The bus is responsible for then adding the child in the right order
418  * and discovering other things about the child.  The bus driver is
419  * free to ignore this hint, to do special things, etc.  It is all up
420  * to the bus driver to interpret.
421  *
422  * This method is only called in response to the parent bus asking for
423  * hinted devices to be enumerated.
424  *
425  * @param _dev		the bus device
426  * @param _dname	the name of the device w/o unit numbers
427  * @param _dunit	the unit number of the device
428  */
429 
BUS_HINTED_CHILD(device_t _dev,const char * _dname,int _dunit)430 static __inline void BUS_HINTED_CHILD(device_t _dev, const char *_dname,
431                                       int _dunit)
432 {
433 	kobjop_t _m;
434 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_hinted_child);
435 	((bus_hinted_child_t *) _m)(_dev, _dname, _dunit);
436 }
437 
438 // delete dma
439 
440 /** @brief Unique descriptor for the BUS_HINT_DEVICE_UNIT() method */
441 extern struct kobjop_desc bus_hint_device_unit_desc;
442 /** @brief A function implementing the BUS_HINT_DEVICE_UNIT() method */
443 typedef void bus_hint_device_unit_t(device_t _dev, device_t _child,
444                                     const char *_name, int *_unitp);
445 /**
446  * @brief Allow the bus to determine the unit number of a device.
447  *
448  * @param _dev		the parent device of @p _child
449  * @param _child	the device whose unit is to be wired
450  * @param _name		the name of the device's new devclass
451  * @param _unitp	a pointer to the device's new unit value
452  */
453 
BUS_HINT_DEVICE_UNIT(device_t _dev,device_t _child,const char * _name,int * _unitp)454 static __inline void BUS_HINT_DEVICE_UNIT(device_t _dev, device_t _child,
455                                           const char *_name, int *_unitp)
456 {
457 	kobjop_t _m;
458 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_hint_device_unit);
459 	((bus_hint_device_unit_t *) _m)(_dev, _child, _name, _unitp);
460 }
461 
462 /** @brief Unique descriptor for the BUS_NEW_PASS() method */
463 extern struct kobjop_desc bus_new_pass_desc;
464 /** @brief A function implementing the BUS_NEW_PASS() method */
465 typedef void bus_new_pass_t(device_t _dev);
466 /**
467  * @brief Notify a bus that the bus pass level has been changed
468  *
469  * @param _dev		the bus device
470  */
471 
BUS_NEW_PASS(device_t _dev)472 static __inline void BUS_NEW_PASS(device_t _dev)
473 {
474 	kobjop_t _m;
475 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_new_pass);
476 	((bus_new_pass_t *) _m)(_dev);
477 }
478 
479 /** @brief Unique descriptor for the BUS_SUSPEND_CHILD() method */
480 extern struct kobjop_desc bus_suspend_child_desc;
481 /** @brief A function implementing the BUS_SUSPEND_CHILD() method */
482 typedef int bus_suspend_child_t(device_t _dev, device_t _child);
483 /**
484  * @brief Suspend a given child
485  *
486  * @param _dev		the parent device of @p _child
487  * @param _child	the device to suspend
488  */
489 
BUS_SUSPEND_CHILD(device_t _dev,device_t _child)490 static __inline int BUS_SUSPEND_CHILD(device_t _dev, device_t _child)
491 {
492 	kobjop_t _m;
493 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_suspend_child);
494 	return ((bus_suspend_child_t *) _m)(_dev, _child);
495 }
496 
497 /** @brief Unique descriptor for the BUS_RESUME_CHILD() method */
498 extern struct kobjop_desc bus_resume_child_desc;
499 /** @brief A function implementing the BUS_RESUME_CHILD() method */
500 typedef int bus_resume_child_t(device_t _dev, device_t _child);
501 /**
502  * @brief Resume a given child
503  *
504  * @param _dev		the parent device of @p _child
505  * @param _child	the device to resume
506  */
507 
BUS_RESUME_CHILD(device_t _dev,device_t _child)508 static __inline int BUS_RESUME_CHILD(device_t _dev, device_t _child)
509 {
510 	kobjop_t _m;
511 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_resume_child);
512 	return ((bus_resume_child_t *) _m)(_dev, _child);
513 }
514 
515 /** @brief Unique descriptor for the BUS_GET_DOMAIN() method */
516 extern struct kobjop_desc bus_get_domain_desc;
517 /** @brief A function implementing the BUS_GET_DOMAIN() method */
518 typedef int bus_get_domain_t(device_t _dev, device_t _child, int *_domain);
519 /**
520  * @brief Get the VM domain handle for the given bus and child.
521  *
522  * @param _dev		the bus device
523  * @param _child	the child device
524  * @param _domain	a pointer to the bus's domain handle identifier
525  */
526 
BUS_GET_DOMAIN(device_t _dev,device_t _child,int * _domain)527 static __inline int BUS_GET_DOMAIN(device_t _dev, device_t _child, int *_domain)
528 {
529 	kobjop_t _m;
530 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_get_domain);
531 	return ((bus_get_domain_t *) _m)(_dev, _child, _domain);
532 }
533 
534 
535 /** @brief Unique descriptor for the BUS_RESET_PREPARE() method */
536 extern struct kobjop_desc bus_reset_prepare_desc;
537 /** @brief A function implementing the BUS_RESET_PREPARE() method */
538 typedef int bus_reset_prepare_t(device_t _dev, device_t _child);
539 /**
540  * @brief Prepares the given child of the bus for reset
541  *
542  * Typically bus detaches or suspends children' drivers, and then
543  * calls this method to save bus-specific information, for instance,
544  * PCI config space, which is damaged by reset.
545  *
546  * The bus_helper_reset_prepare() helper is provided to ease
547  * implementing bus reset methods.
548  *
549  * @param _dev		the bus device
550  * @param _child	the child device
551  */
552 
BUS_RESET_PREPARE(device_t _dev,device_t _child)553 static __inline int BUS_RESET_PREPARE(device_t _dev, device_t _child)
554 {
555 	kobjop_t _m;
556 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_reset_prepare);
557 	return ((bus_reset_prepare_t *) _m)(_dev, _child);
558 }
559 
560 /** @brief Unique descriptor for the BUS_RESET_POST() method */
561 extern struct kobjop_desc bus_reset_post_desc;
562 /** @brief A function implementing the BUS_RESET_POST() method */
563 typedef int bus_reset_post_t(device_t _dev, device_t _child);
564 /**
565  * @brief Restores the child operations after the reset
566  *
567  * The bus_helper_reset_post() helper is provided to ease
568  * implementing bus reset methods.
569  *
570  * @param _dev		the bus device
571  * @param _child	the child device
572  */
573 
BUS_RESET_POST(device_t _dev,device_t _child)574 static __inline int BUS_RESET_POST(device_t _dev, device_t _child)
575 {
576 	kobjop_t _m;
577 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_reset_post);
578 	return ((bus_reset_post_t *) _m)(_dev, _child);
579 }
580 
581 /** @brief Unique descriptor for the BUS_RESET_CHILD() method */
582 extern struct kobjop_desc bus_reset_child_desc;
583 /** @brief A function implementing the BUS_RESET_CHILD() method */
584 typedef int bus_reset_child_t(device_t _dev, device_t _child, int _flags);
585 /**
586  * @brief Performs reset of the child
587  *
588  * @param _dev		the bus device
589  * @param _child	the child device
590  * @param _flags	DEVF_RESET_ flags
591  */
592 
BUS_RESET_CHILD(device_t _dev,device_t _child,int _flags)593 static __inline int BUS_RESET_CHILD(device_t _dev, device_t _child, int _flags)
594 {
595 	kobjop_t _m;
596 	KOBJOPLOOKUP(((kobj_t)_dev)->ops,bus_reset_child);
597 	return ((bus_reset_child_t *) _m)(_dev, _child, _flags);
598 }
599 
600 #endif /* _bus_if_h_ */
601