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:
Sepherosa Ziehau 2016-09-28 08:35:05 +00:00
parent 090aa8d18b
commit a11463fd84
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=306396
2 changed files with 20 additions and 0 deletions

View File

@ -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) &&

View File

@ -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_ */