helper
union _cbor_float_helper helper = {.as_uint = _cbor_load_uint32(source)};
return helper.as_float;
union _cbor_double_helper helper = {.as_uint = _cbor_load_uint64(source)};
return helper.as_double;
struct drm_fb_helper *helper = &sc->helper;
struct rkdrm_framebuffer *sfb = to_rkdrm_framebuffer(helper->fb);
drm_fb_helper_restore_fbdev_mode_unlocked(&sc->helper);
struct drm_fb_helper *fb_helper = &sc->helper;
struct drm_fb_helper *helper = &sc->helper;
drm_fb_helper_prepare(&sc->sc_ddev, &sc->helper, 32,
if (drm_fb_helper_init(&sc->sc_ddev, &sc->helper)) {
sc->helper.fb = malloc(sizeof(struct rkdrm_framebuffer),
drm_fb_helper_initial_config(&sc->helper);
drm_fb_helper_restore_fbdev_mode_unlocked(&sc->helper);
sfb = to_rkdrm_framebuffer(helper->fb);
ri->ri_depth = helper->fb->format->depth;
ri->ri_width = helper->fb->width;
ri->ri_height = helper->fb->height;
rkdrm_fb_probe(struct drm_fb_helper *helper, struct drm_fb_helper_surface_size *sizes)
struct drm_device *ddev = helper->dev;
struct rkdrm_framebuffer *sfb = to_rkdrm_framebuffer(helper->fb);
struct drm_framebuffer *fb = helper->fb;
info = drm_fb_helper_alloc_info(helper);
info->par = helper;
struct drm_fb_helper helper;
struct drm_fb_helper *helper = adev_to_drm(adev)->fb_helper;
drm_fb_helper_blank(adev->burner_fblank, helper->info);
struct drm_fb_helper *helper = info->par;
list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
mutex_lock(&helper->client.modeset_mutex);
drm_client_for_each_modeset(mode_set, &helper->client) {
mutex_unlock(&helper->client.modeset_mutex);
struct drm_fb_helper *helper = info->par;
struct drm_client_dev *client = &helper->client;
struct drm_device *dev = helper->dev;
struct drm_fb_helper *helper;
list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
struct drm_device *dev = helper->dev;
mutex_lock(&helper->lock);
drm_client_modeset_commit_locked(&helper->client);
mutex_unlock(&helper->lock);
struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper,
fb_set_suspend(helper->info, 0);
static void drm_fb_helper_fb_dirty(struct drm_fb_helper *helper)
struct drm_device *dev = helper->dev;
struct drm_clip_rect *clip = &helper->damage_clip;
if (drm_WARN_ON_ONCE(dev, !helper->funcs->fb_dirty))
spin_lock_irqsave(&helper->damage_lock, flags);
spin_unlock_irqrestore(&helper->damage_lock, flags);
ret = helper->funcs->fb_dirty(helper, &clip_copy);
spin_lock_irqsave(&helper->damage_lock, flags);
spin_unlock_irqrestore(&helper->damage_lock, flags);
struct drm_fb_helper *helper = container_of(work, struct drm_fb_helper, damage_work);
drm_fb_helper_fb_dirty(helper);
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
INIT_LIST_HEAD(&helper->kernel_fb_list);
mtx_init(&helper->damage_lock, IPL_TTY);
INIT_WORK(&helper->resume_work, drm_fb_helper_resume_worker);
INIT_WORK(&helper->damage_work, drm_fb_helper_damage_work);
helper->damage_clip.x1 = helper->damage_clip.y1 = ~0;
rw_init(&helper->lock, "fbhlk");
helper->funcs = funcs;
helper->dev = dev;
helper->preferred_bpp = preferred_bpp;
static void drm_fb_helper_add_damage_clip(struct drm_fb_helper *helper, u32 x, u32 y,
struct drm_clip_rect *clip = &helper->damage_clip;
spin_lock_irqsave(&helper->damage_lock, flags);
spin_unlock_irqrestore(&helper->damage_lock, flags);
static void drm_fb_helper_damage(struct drm_fb_helper *helper, u32 x, u32 y,
drm_fb_helper_add_damage_clip(helper, x, y, width, height);
schedule_work(&helper->damage_work);
struct drm_fb_helper *helper = info->par;
drm_fb_helper_damage(helper, damage_area.x1, damage_area.y1,
static int drm_fbdev_dma_helper_fb_dirty(struct drm_fb_helper *helper,
struct drm_device *dev = helper->dev;
if (helper->fb->funcs->dirty) {
ret = drm_fbdev_dma_damage_blit(helper, clip);
ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1);
static int drm_fbdev_shmem_helper_fb_dirty(struct drm_fb_helper *helper,
struct drm_device *dev = helper->dev;
if (helper->fb->funcs->dirty) {
ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1);
static int drm_fbdev_ttm_helper_fb_dirty(struct drm_fb_helper *helper,
struct drm_device *dev = helper->dev;
ret = drm_fbdev_ttm_damage_blit(helper, clip);
if (helper->fb->funcs->dirty) {
ret = helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1);
static int intelfb_dirty(struct drm_fb_helper *helper, struct drm_clip_rect *clip)
if (helper->fb->funcs->dirty)
return helper->fb->funcs->dirty(helper->fb, NULL, 0, 0, clip, 1);
int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
struct intel_display *display = to_intel_display(helper->dev);
struct intel_fbdev *ifbdev = to_intel_fbdev(helper);
info = drm_fb_helper_alloc_info(helper);
helper->funcs = &intel_fb_helper_funcs;
helper->fb = &fb->base;
struct drm_framebuffer *fb = helper->fb;
int intel_fbdev_driver_fbdev_probe(struct drm_fb_helper *helper,
struct drm_fb_helper *helper = dev->fb_helper;
drm_fb_helper_blank(dev_priv->burner_fblank, helper->info);
void (*fb_set_suspend)(struct drm_fb_helper *helper, bool suspend);
void drm_fb_helper_prepare(struct drm_device *dev, struct drm_fb_helper *helper,
int drm_fb_helper_init(struct drm_device *dev, struct drm_fb_helper *helper);
void drm_fb_helper_fini(struct drm_fb_helper *helper);
struct drm_fb_helper *helper,
struct drm_fb_helper *helper)
helper->dev = dev;
dev->fb_helper = helper;
static inline void drm_fb_helper_fini(struct drm_fb_helper *helper)
if (helper && helper->dev)
helper->dev->fb_helper = NULL;
int (*fb_dirty)(struct drm_fb_helper *helper, struct drm_clip_rect *clip);
void (*fb_restore)(struct drm_fb_helper *helper);
struct drm_fb_helper *helper = rdev_to_drm(rdev)->fb_helper;
drm_fb_helper_blank(rdev->burner_fblank, helper->info);
viogpu_fb_probe(struct drm_fb_helper *helper,
struct viogpu_softc *sc = helper->dev->dev_private;
struct drm_device *ddev = helper->dev;
struct viogpu_framebuffer *sfb = to_viogpu_framebuffer(helper->fb);
struct drm_framebuffer *fb = helper->fb;
info = drm_fb_helper_alloc_fbi(helper);
info->par = helper;
helper_add_key(struct helper *helper, struct sshkey *key)
helper->keyblobs = xrecallocarray(helper->keyblobs, helper->nkeyblobs,
helper->nkeyblobs + 1, sizeof(*helper->keyblobs));
if ((helper->keyblobs[helper->nkeyblobs] = sshbuf_new()) == NULL)
if ((r = sshkey_putb(key, helper->keyblobs[helper->nkeyblobs])) != 0)
helper->nkeyblobs++;
sshkey_type(key), helper->path, helper->nkeyblobs);
helper_terminate(struct helper *helper)
if (helper == NULL)
if (helper->path == NULL)
helper->path, helper->nkeyblobs);
close(helper->fd);
helper->fd = -1;
helper->pid = -1;
if (helpers[i] == helper) {
for (i = 0; i < helper->nkeyblobs; i++)
sshbuf_free(helper->keyblobs[i]);
free(helper->path);
free(helper);
struct helper *helper;
if ((helper = helper_by_key(key)) == NULL || helper->fd == -1)
send_msg(helper->fd, msg);
if ((status = recv_msg(helper->fd, msg)) != SSH2_AGENT_SIGN_RESPONSE) {
struct helper *helper = NULL;
if ((helper = helper_by_key(priv)) == NULL || helper->fd == -1)
sshkey_type(priv), sshkey_type(certpub), helper->path);
helper_add_key(helper, ret);
helper->path, helper->nkeyblobs);
static struct helper *
struct helper *helper;
helper = xcalloc(1, sizeof(*helper));
free(helper);
helper->fd = pair[0];
helper->path = xstrdup(path);
helper->pid = pid;
helper->path, helper->fd, (long)helper->pid);
helpers[nhelpers++] = helper;
return helper;
struct helper *helper;
if ((helper = helper_by_provider(name)) == NULL &&
(helper = pkcs11_start_helper(name)) == NULL)
debug3_f("add %s", helper->path);
send_msg(helper->fd, msg);
type = recv_msg(helper->fd, msg);
helper_add_key(helper, k);
helper_terminate(helper);
struct helper *helper;
if ((helper = helper_by_provider(name)) != NULL)
helper_terminate(helper);
struct helper *helper;
if ((helper = helper_by_key(key)) == NULL || helper->fd == -1)
for (i = 0; i < helper->nkeyblobs; i++) {
if (sshbuf_equals(keyblob, helper->keyblobs[i]) == 0) {
helper->keyblobs[i - 1] = helper->keyblobs[i];
helper->keyblobs = xrecallocarray(helper->keyblobs,
helper->nkeyblobs, helper->nkeyblobs - 1,
sizeof(*helper->keyblobs));
helper->nkeyblobs--;
if (helper->nkeyblobs == 0)
helper_terminate(helper);
static struct helper **helpers;
static struct helper *
static struct helper *
debug_f("starting %s %s", helper,
execlp(helper, helper, verbosity, (char *)NULL);
char execbuf[100], *helper, *verbosity = NULL;
helper = getenv("SSH_SK_HELPER");
if (helper == NULL || strlen(helper) == 0)
helper = _PATH_SSH_SK_HELPER;