#ifndef __IRPLIST_H
#define __IRPLIST_H

#define MAX_IRP_LIST_SIZE	32

typedef struct _IRP_LIST_ELEMENT
{
	LIST_ENTRY  irp_link;
	PIRP		pirp;
	struct _URB *purb;

} IRP_LIST_ELEMENT, *PIRP_LIST_ELEMENT;

typedef struct _IRP_LIST
{
	KSPIN_LOCK 			irp_list_lock;
	LIST_HEAD			irp_busy_list;
	LONG				irp_free_list_count;
	LIST_HEAD			irp_free_list;
	PIRP_LIST_ELEMENT 	irp_list_element_array;

} IRP_LIST, *PIRP_LIST;

BOOLEAN
init_irp_list(
PIRP_LIST irp_list
);

VOID
destroy_irp_list(
PIRP_LIST irp_list
);

BOOLEAN
add_irp_to_list(
PIRP_LIST irp_list,
PIRP pirp,
PURB purb
);

PURB
remove_irp_from_list(
PIRP_LIST irp_list,
PIRP pirp,
struct _USB_DEV_MANAGER *dev_mgr
);

BOOLEAN
irp_list_empty(
PIRP_LIST irp_list
);

BOOLEAN
irp_list_full(
PIRP_LIST irp_list
);

#endif
