cam/ata: Allow drivers to veto ATA disk attachment.
This eventhandler is mainly used by VMs, e.g. Hyper-V, whose disk controllers share the disks with the simulated ATA controllers. Submitted by: Hongjiang Zhang <honzhan microsoft com> Discussed with: mav MFC after: 1 week Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D7693
This commit is contained in:
parent
090aa8d18b
commit
a11463fd84
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=306396
@ -40,6 +40,7 @@ __FBSDID("$FreeBSD$");
|
||||
#include <sys/interrupt.h>
|
||||
#include <sys/sbuf.h>
|
||||
|
||||
#include <sys/eventhandler.h>
|
||||
#include <sys/lock.h>
|
||||
#include <sys/mutex.h>
|
||||
#include <sys/sysctl.h>
|
||||
@ -872,12 +873,24 @@ device_fail: if ((path->device->flags & CAM_DEV_UNCONFIGURED) == 0)
|
||||
{
|
||||
struct ccb_pathinq cpi;
|
||||
int16_t *ptr;
|
||||
int veto = 0;
|
||||
|
||||
ident_buf = &softc->ident_data;
|
||||
for (ptr = (int16_t *)ident_buf;
|
||||
ptr < (int16_t *)ident_buf + sizeof(struct ata_params)/2; ptr++) {
|
||||
*ptr = le16toh(*ptr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Allow others to veto this ATA disk attachment. This
|
||||
* is mainly used by VMs, whose disk controllers may
|
||||
* share the disks with the simulated ATA controllers.
|
||||
*/
|
||||
EVENTHANDLER_INVOKE(ada_probe_veto, path, ident_buf, &veto);
|
||||
if (veto) {
|
||||
goto device_fail;
|
||||
}
|
||||
|
||||
if (strncmp(ident_buf->model, "FX", 2) &&
|
||||
strncmp(ident_buf->model, "NEC", 3) &&
|
||||
strncmp(ident_buf->model, "Pioneer", 7) &&
|
||||
|
@ -270,4 +270,11 @@ typedef void (*unregister_framebuffer_fn)(void *, struct fb_info *);
|
||||
EVENTHANDLER_DECLARE(register_framebuffer, register_framebuffer_fn);
|
||||
EVENTHANDLER_DECLARE(unregister_framebuffer, unregister_framebuffer_fn);
|
||||
|
||||
/* Veto ada attachment */
|
||||
struct cam_path;
|
||||
struct ata_params;
|
||||
typedef void (*ada_probe_veto_fn)(void *, struct cam_path *,
|
||||
struct ata_params *, int *);
|
||||
EVENTHANDLER_DECLARE(ada_probe_veto, ada_probe_veto_fn);
|
||||
|
||||
#endif /* _SYS_EVENTHANDLER_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user