/* * Copyright (C) 2013 Google, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #ifndef __VIDEO_ADF_ADF_H #define __VIDEO_ADF_ADF_H #include <linux/idr.h> #include <linux/list.h> #include <video/adf.h> #include "sync.h" struct adf_event_refcount { struct rb_node node; enum adf_event_type type; int refcount; }; void adf_buffer_cleanup(struct adf_buffer *buf); void adf_buffer_mapping_cleanup(struct adf_buffer_mapping *mapping, struct adf_buffer *buf); void adf_post_cleanup(struct adf_device *dev, struct adf_pending_post *post); struct adf_attachment_list *adf_attachment_find(struct list_head *list, struct adf_overlay_engine *eng, struct adf_interface *intf); int adf_attachment_validate(struct adf_device *dev, struct adf_overlay_engine *eng, struct adf_interface *intf); void adf_attachment_free(struct adf_attachment_list *attachment); struct adf_event_refcount *adf_obj_find_event_refcount(struct adf_obj *obj, enum adf_event_type type); static inline int adf_obj_check_supports_event(struct adf_obj *obj, enum adf_event_type type) { if (!obj->ops || !obj->ops->supports_event) return -EOPNOTSUPP; if (!obj->ops->supports_event(obj, type)) return -EINVAL; return 0; } static inline int adf_device_attach_op(struct adf_device *dev, struct adf_overlay_engine *eng, struct adf_interface *intf) { if (!dev->ops->attach) return 0; return dev->ops->attach(dev, eng, intf); } static inline int adf_device_detach_op(struct adf_device *dev, struct adf_overlay_engine *eng, struct adf_interface *intf) { if (!dev->ops->detach) return 0; return dev->ops->detach(dev, eng, intf); } #endif /* __VIDEO_ADF_ADF_H */